home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / program / inter51c.zip / INTERRUP.K < prev    next >
Text File  |  1996-07-28  |  359KB  |  9,534 lines

  1. Interrupt List, part 11 of 15
  2. Copyright (c) 1989,1990,1991,1992,1993,1994,1995,1996 Ralf Brown
  3. --------F-2FCB00-----------------------------
  4. INT 2F - Communicating Applications Specification - INSTALLATION CHECK
  5.     AX = CB00h
  6. Return: AL = status
  7.         00h not installed, OK to install
  8.         01h not installed, not OK to install
  9.         FFh installed
  10. Note:    AH = CBh is the default identifier, but may be reconfigured
  11. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=CB0Eh,AX=CBDCh
  12. --------F-2FCB00BX4D53-----------------------
  13. INT 2F - MTEZ XpressFax CASMGR - INSTALLATION CHECK
  14.     AX = CB00h
  15.     BX = 4D53h ('MS')
  16.     CX = 4949h ('II')
  17. Return: AL = status
  18.         00h not installed, OK to install
  19.         01h not installed, not OK to install
  20.         FFh installed
  21.         BX = 6D73h ('ms')
  22.         CX = 6969h ('ii')
  23. Note:    this function is equivalent to the standard CASMGR installation check,
  24.       but uses the additional magic values to identify which CAS is
  25.       installed
  26. SeeAlso: AH=2Ah,AX=8000h"FaxBIOS",AX=C000h/BX=444Bh,AX=CB0Eh,AX=CB16h
  27. --------F-2FCB01-----------------------------
  28. INT 2F - Communicating Applications Specification - SUBMIT A TASK
  29.     AX = CB01h
  30.     DS:DX -> ASCIZ name of task control file
  31. Return: AX >= 0: event handle
  32.     AX < 0: two's complement of error code (see #2242)
  33. Note:    files needed for an event must be kept until task is complete or error
  34. SeeAlso: AX=CB0Bh,AX=CB15h
  35.  
  36. (Table 2242)
  37. Values for CAS error code:
  38.   (AH = class, AL = subcode, value passed back is 2's complement)
  39.   Class 00h    --- FAX warnings
  40.     Subcode 00h    no error
  41.         02h    bad scanline count
  42.         03h    page sent with errors, could not retransmit
  43.         04h    received data lost
  44.         05h    invalid or missing logo file
  45.         06h    filename does not match nonstandard format (NSF) header
  46.         07h    file size does not match NSF header
  47.   Class 01h    --- DOS warnings (data was sent)
  48.     Subcode 01h    invalid function
  49.         05h    access denied
  50.         06h    invalid handle
  51.         others    see INT 21/AH=59h
  52.   Class 02h    --- fatal errors (data not sent)
  53.     Subcode 00h    multiplex handler failed
  54.         01h    unknown command
  55.         02h    bad event handle
  56.         03h    FIND NEXT attempted before FIND FIRST
  57.         04h    no more events
  58.         07h    invalid queue type
  59.         08h    bad control file
  60.         09h    communication board busy
  61.         0Ah    invalid command parameter
  62.         0Bh    can't uninstall resident code
  63.         0Ch    file exists
  64.         80h    unknown task type
  65.         81h    bad phone number
  66.         82h    bad .PCX file header
  67.         83h    unexpected EOF
  68.         84h    unexpected disconnect
  69.         85h    too many dialing retries
  70.         86h    no file specified for send
  71.         87h    communication board timeout
  72.         88h    received too many pages (>1023) of data
  73.         89h    manual connect initiated too long ago
  74.         8Ah    hardware command set error
  75.         8Bh    bad NonStandard Format (NSF) header file
  76.   Class 03h    --- fatal DOS errors
  77.     Subcode 02h    file not found
  78.         03h    path not found
  79.         others    see INT 21/AH=59h
  80.   Class 04h    --- FAX errors
  81.     Subcode 01h    remote unit not Group 3 compatible
  82.         02h    remote unit did not send capabilities
  83.         03h    other FAX machine incompatible
  84.         04h    other FAX incapable of file transfers
  85.         05h    exceeded retrain or FAX resend limit
  86.         06h    line noise or failure to agree on bit rate
  87.         07h    remote disconnected after receiving data
  88.         08h    no response from remote after sending data
  89.         09h    remote's capabilities incompatible
  90.         0Ah    no dial tone (v1.2+)
  91.         0Bh    invalid response from remote unit after sending data
  92.         0Dh    phone line dead or remote unit disconnected
  93.         0Eh    timeout while waiting for secondary dial tone (v1.2+)
  94.         11h    invalid command from remote after receiving data
  95.         15h    tried to receive from incompatible hardware
  96.         5Ch    received data overflowed input buffer
  97.         5Dh    remote unexpectedly stopped sending data
  98.         5Eh    other FAX machine jammed (no data sent)
  99.         5Fh    remote took too long to send fax scan line
  100.         63h    can't get through to remote unit
  101.         64h    user canceled event
  102.   Class 05h    --- application-specific (v1.2+)
  103.   ---Intel FAXPOP.EXE
  104.     Subcode 00h    tried to send while in graphics mode
  105.         01h    insufficient disk space
  106.         02h    internal buffer overflow
  107.   Class 06h    --- CAS implementation-specific (v1.2+)
  108. --------F-2FCB02-----------------------------
  109. INT 2F - Communicating Applications Specification - ABORT CURRENT EVENT
  110.     AX = CB02h
  111. Return: AX >= 0: event handle of aborted event
  112.     AX < 0: error code (see #2242)
  113. Note:    termination could take up to 30 seconds
  114. SeeAlso: AX=CB08h,AX=CB10h
  115. --------F-2FCB05-----------------------------
  116. INT 2F - Communicating Applications Specification - FIND FIRST QUEUE ENTRY
  117.     AX = CB05h
  118.     CX = status of events to find
  119.         0000h successful completion
  120.         0001h waiting to be processed
  121.         0002h number has been dialed
  122.         0003h connection established, sending
  123.         0004h connection established, receiving
  124.         0005h event aborted
  125.         FFFFh find any event, regardless of status
  126.         other negative values, match error code
  127.     DH = direction
  128.         00h chronological order, earliest to latest
  129.         01h reverse chronological order, latest to earliest
  130.     DL = queue to search
  131.         00h task queue
  132.         01h receive queue
  133.         02h log queue
  134. Return: AX = 0000h successful
  135.         BX = event handle for found event
  136.     AX < 0       error code (see #2242)
  137. SeeAlso: AX=CB06h,AX=CB07h
  138. --------F-2FCB06-----------------------------
  139. INT 2F - Communicating Applications Specification - FIND NEXT QUEUE ENTRY
  140.     AX = CB06h
  141.     DL = queue to search
  142.         00h task queue
  143.         01h receive queue
  144.         02h log queue
  145. Return: AX = 0000h successful
  146.         BX = event handle for found event
  147.     AX < 0       error code (see #2242)
  148. Note:    direction of search is same as preceding FIND FIRST call
  149. SeeAlso: AX=CB05h
  150. --------F-2FCB07-----------------------------
  151. INT 2F - Communicating Applications Specification - OPEN FILE
  152.     AX = CB07h
  153.     BX = event handle from find (AL=05h,06h) or submit task (AL=01h)
  154.     CX = receive file number (ignored for task queue and log queue)
  155.         0000h  open receive control file
  156.         N       open Nth received data file
  157.     DL = queue
  158.         00h task queue
  159.         01h receive queue control file or received file, as given by CX
  160.         02h log queue
  161.         03h group file in task queue (v1.2+)
  162.         04h group file in log queue (v1.2+)
  163. Return: AX = 0000h successful
  164.         BX = DOS file handle for requested file
  165.     AX < 0       error code (see #2242)
  166. Note:    the returned file handle has been opened in read-only mode and should
  167.       be closed with INT 21/AH=3Eh after use
  168. SeeAlso: AX=CB01h,AX=CB05h,AX=CB14h
  169. --------F-2FCB08-----------------------------
  170. INT 2F - Communicating Applications Specification - DELETE FILE
  171.     AX = CB08h
  172.     BX = event handle
  173.     CX = receive file number
  174.         0000h delete ALL received files and receive control file
  175.         N      delete Nth received file
  176.     DL = queue
  177.         00h delete control file in task queue and corresponding group file
  178.           if it exists
  179.         01h delete file in receive queue, as given by CX
  180.         02h delete control file in log queue (individual deletions not
  181.           recommended, to maintain integrity of log) and corresponding
  182.           group file if it exists
  183. Return: AX = 0000h successful
  184.     AX < 0       error code (see #2242)
  185. SeeAlso: AX=CB02h,AX=CB09h
  186. --------F-2FCB09-----------------------------
  187. INT 2F - Communicating Applications Specification - DELETE ALL FILES IN Q
  188.     AX = CB09h
  189.     DL = queue
  190.         00h delete all control files in task queue, including all group
  191.           files
  192.         01h delete all files in receive queue
  193.         02h delete all control files in log queue, including all group
  194.           files
  195. Return: AX = 0000h successful
  196.     AX < 0       error code (see #2242)
  197. SeeAlso: AX=CB08h
  198. --------F-2FCB0A-----------------------------
  199. INT 2F - Communicating Applications Specification - GET EVENT DATE
  200.     AX = CB0Ah
  201.     BX = event handle
  202.     DL = queue
  203.         00h task queue
  204.         01h receive queue
  205.         02h log queue
  206. Return: AX = 0000h successful
  207.         CX = year
  208.         DH = month
  209.         DL = day
  210.     AX < 0       error code (see #2242)
  211. SeeAlso: AX=CB0Bh,AX=CB0Ch
  212. --------F-2FCB0B-----------------------------
  213. INT 2F - Communicating Applications Specification - SET TASK DATE
  214.     AX = CB0Bh
  215.     BX = event handle (task event only)
  216.     CX = year
  217.     DH = month
  218.     DL = day
  219. Return: AX = 0000h successful
  220.     AX < 0       error code (see #2242)
  221. Note:    setting a task's date and time to before the current date and time
  222.       causes it to execute immediately
  223. SeeAlso: AX=CB01h,AX=CB0Ah,AX=CB0Dh
  224. --------F-2FCB0C-----------------------------
  225. INT 2F - Communicating Applications Specification - GET EVENT TIME
  226.     AX = CB0Ch
  227.     BX = event handle
  228.     DL = queue
  229.         00h task queue
  230.         01h receive queue
  231.         02h log queue
  232. Return: AX = 0000h successful
  233.         CH = hour
  234.         CL = minute
  235.         DH = second
  236.         DL = 00h
  237.     AX < 0       error code (see #2242)
  238. SeeAlso: AX=CB0Ah,AX=CB0Dh
  239. --------F-2FCB0D-----------------------------
  240. INT 2F - Communicating Applications Specification - SET TASK TIME
  241.     AX = CB0Dh
  242.     BX = event handle (task events only)
  243.     CH = hour
  244.     CL = minute
  245.     DH = second
  246.     DL unused
  247. Return: AX = 0000h successful
  248.     AX < 0       error code (see #2242)
  249. Note:    setting a task's date and time to before the current date and time
  250.       causes it to execute immediately
  251. SeeAlso: AX=CB0Bh,AX=CB0Ch,AX=CB10h
  252. --------F-2FCB0E-----------------------------
  253. INT 2F - Communicating Applications Specification - GET EXTERNAL DATA BLOCK
  254.     AX = CB0Eh
  255.     DS:DX -> 256-byte buffer for external data block (see #2243)
  256. Return: AX = 0000h successful
  257.         DS:DX buffer filled
  258.     AX < 0       error code (see #2242)
  259.  
  260. Format of CAS external data block:
  261. Offset    Size    Description    (Table 2243)
  262.  00h    BYTE    CAS major version
  263.  01h    BYTE    CAS minor version
  264.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  265.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  266.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  267.  60h 32 BYTEs    ASCIZ default sender name
  268.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  269.  95h 107 BYTEs    reserved
  270. --------F-2FCB0F-----------------------------
  271. INT 2F - Communicating Applications Specification - GET/SET AUTORECEIVE
  272.     AX = CB0Fh
  273.     DL = subfunction
  274.         00h get current autoreceive state
  275.         01h set autoreceive state
  276.         DH = number of rings before answer, 00h = never
  277. Return: AX = 0000h autoreceive disabled
  278.     AX = N       number of rings before answer
  279.     AX < 0       error code (see #2242)
  280. --------F-2FCB10-----------------------------
  281. INT 2F - Communicating Applications Specification - GET CURRENT EVENT STATUS
  282.     AX = CB10h
  283.     DS:DX -> 512-byte buffer for status area (see #2245)
  284. Return: AX = 0000h successful
  285.         BX = event handle of current event or negative error code if
  286.               no current event
  287.         buffer filled
  288.     AX < 0       error code (see #2242)
  289. SeeAlso: AX=CB02h,AX=CB0Dh
  290.  
  291. (Table 2244)
  292. Values for CAS event type:
  293.  00h    send
  294.  01h    receive
  295.  02h    polled send
  296.  03h    polled receive
  297.  04h to 7Fh reserved
  298.  FFh    serious hardware error
  299.  
  300. Format of CAS status area:
  301. Offset    Size    Description    (Table 2245)
  302.  00h    BYTE    event type (see #2244)
  303.  01h    BYTE    transfer type
  304.         00h 200x200 dpi, FAX mode
  305.         01h 100x200 dpi, FAX mode
  306.         02h file transfer mode
  307.         03h to 7Fh reserved
  308.  02h    WORD    event status (see #2246)
  309.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  310.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  311.  08h    WORD    number of files to transfer, max 7FFFh
  312.  0Ah    WORD    offset of file transfer record
  313.  0Ch 47 BYTEs    ASCIZ phone number to call
  314.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  315.  7Bh    BYTE    reserved (00h)
  316.  7Ch    BYTE    connect time, seconds
  317.  7Dh    BYTE    connect time, minutes
  318.  7Eh    BYTE    connect time, hours
  319.  7Fh    DWORD    total number of pages in all files
  320.  83h    DWORD    pages already transmitted
  321.  87h    WORD    number of files already transmitted
  322.  89h    BYTE    cover page flag
  323.         00h don't transmit cover page
  324.         01h transmit cover page
  325.         02h to 7Fh reserved
  326.  8Ah    WORD    total number of transmission errors
  327.  8Ch 78 BYTEs    reserved (zeros)
  328.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  329.  EFH 32 BYTEs    ASCIZ destination name
  330. 10Fh 32 BYTEs    ASCIZ sender name
  331. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  332. 17Fh 128 BYTEs    file transfer record for current event (see #2247)
  333.  
  334. (Table 2246)
  335. Values for CAS event status:
  336.  0000h    completed successfully
  337.  0001h    waiting
  338.  0002h    number dialed
  339.  0003h    connected, sending
  340.  0004h    connected, receiving
  341.  0005h    aborted
  342.  0006h to 007Fh reserved
  343.  0080h to 7FFFh application-specific events
  344.  8000h to FFFFh error codes
  345.  
  346. Format of CAS file transfer record:
  347. Offset    Size    Description    (Table 2247)
  348.  00h    BYTE    file type (ignored unless FAX)
  349.         00h ASCII
  350.         01h PCX
  351.         02h DCX
  352.         03h to 7Fh reserved
  353.  01h    BYTE    text size for ASCII FAX file
  354.         00h = 80 columns by 66 lines (11 inches)
  355.         01h = 132 columns by 88 lines (11 inches)
  356.         02h to 7Fh reserved
  357.  02h    BYTE    status of file
  358.         00h untouched
  359.         01h opened
  360.         02h moved
  361.         03h deleted
  362.         04h not yet received
  363.         05h to 7Fh reserved
  364.  03h    DWORD    bytes already transmitted
  365.  07h    DWORD    file size in bytes
  366.  0Bh    WORD    pages alread transmitted
  367.  0Dh    WORD    number of pages in file
  368.  0Fh 80 BYTEs    ASCIZ filename
  369.  5Fh    BYTE    1/8 inch page length
  370.         if page length below set to 01h through 7Fh, this value
  371.           specifies additional 1/8 inch increments to page length
  372.  60h    BYTE    page length
  373.         00h = 11 inches
  374.         01h to 7Fh = page length is this number of inches plus value of
  375.               1/8 inch field above
  376.         80h to FEh reserved
  377.         FFh = ASCII pages ending with formfeed
  378.  61h 31 BYTEs    reserved (zeros)
  379. --------F-2FCB11-----------------------------
  380. INT 2F - Communicating Applications Specification - GET QUEUE STATUS
  381.     AX = CB11h
  382.     DL = queue to get status of
  383.         00h task queue
  384.         01h receive queue
  385.         02h log queue
  386.         03h send events (v1.2+)
  387.         04h receive events (v1.2+)
  388. Return: AX >= 0     total number of changes made to queue, modulo 32768
  389.         BX = number of control files currently in queue
  390.         CX = number of received files (zero for task and log queues)
  391.     AX < 0    error code (see #2242)
  392. SeeAlso: AX=CB12h
  393. --------F-2FCB11DL03-------------------------
  394. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF SEND EVENTS
  395.     AX = CB11h
  396.     DL = 03h
  397. Return: AX = number of successful sends since resident manager started
  398.     BX = number of unsuccessful sends, including warnings
  399. SeeAlso: AX=CB11h/DL=04h
  400. --------F-2FCB11DL04-------------------------
  401. INT 2F - Communicating Applications Spec v1.2+ - GET NUMBER OF RECEIVE EVENTS
  402.     AX = CB11h
  403.     DL = 04h
  404. Return: AX = number of received file events since resident manager started
  405.     BX = number of received FAX events
  406. SeeAlso: AX=CB11h/DL=03h
  407. --------F-2FCB12-----------------------------
  408. INT 2F - Communicating Applications Specification - GET HARDWARE STATUS
  409.     AX = CB12h
  410.     DS:DX -> 128-byte status buffer (see #2248,#2250)
  411. Return: AX = 0000h successful
  412.         DS:DX buffer filled with hardware-dependent status information
  413.        < 0       error code (see #2242)
  414. SeeAlso: AX=CB10h,AX=CB11h
  415.  
  416. Format of status buffer for Intel Connection CoProcessor:
  417. Offset    Size    Description    (Table 2248)
  418.  00h    BYTE    Connection CoProcessor connection status flags (see #2251)
  419.  01h    BYTE    number of kilobytes of free buffer space
  420.  02h    BYTE    page buffer status
  421.         bit 7: Connection CoProcessor has documents to send
  422.         bits 6-0: number of pages in buffer
  423.  03h    BYTE    number of retries left for dialing number
  424.  04h    BYTE    page number to retransmit
  425.  05h    BYTE    communications status (see #2252)
  426.  06h    BYTE    baud rate (see #2249)
  427.  07h  3 BYTEs    reserved
  428.  0Ah    BYTE    Connection CoProcessor hardware status (see #2253)
  429.  0Bh    BYTE    Connection CoProcessor switch states (see #2254)
  430.  0Ch    BYTE    communications flags (see #2255)
  431.  0Dh    BYTE    reserved
  432.  0Eh    WORD    error count (only valid while busy, reset when idle)
  433.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  434.  14h    BYTE    'A' if Connection CoProcessor board present
  435.  15h  9 BYTEs    reserved
  436.  1Eh 21 BYTEs    ASCIZ CCITT identification
  437.  33h 77 BYTEs    reserved
  438. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  439.       by examining the byte at offset 14h
  440.  
  441. Bitfields for Connection CoProcessor baud rate:
  442. Bit(s)    Description    (Table 2249)
  443.  7    reserved
  444.  6-4    baud rate
  445.     000 = 300 baud    (V.21 SDLC or HDLC mode)
  446.     100 = 2400 baud (V.27 ter)
  447.     101 = 4800 baud (V.27 ter)
  448.     110 = 7200 baud (V.29)
  449.     111 = 9600 baud (V.29)
  450.  3-0    reserved, should be 0110
  451.  
  452. Format of status buffer for Intel SatisFAXtion board:
  453. Offset    Size    Description    (Table 2250)
  454.  00h    BYTE    SatisFAXtion connection status flags (see #2256)
  455.  01h    BYTE    SatisFAXtion board state (see #2257)
  456.  02h    BYTE    number of KB free in buffer
  457.  03h    BYTE    number of pages or files in buffer
  458.  04h    BYTE    number of redials remaining on current number
  459.  05h    BYTE    FAX page number to retransmit
  460.  06h    BYTE    current page/file in block transfer
  461.  07h    BYTE    number of rings received (only if auto-answer enabled)
  462.  08h    WORD    error count
  463.  0Ah    DWORD    length of file being transferred
  464.  0Eh  6 BYTEs    reserved
  465.  14h    BYTE    'B' if SatisFAXtion board present
  466.  15h 13 BYTEs    ASCIZ transfer agent name
  467.  22h  5 BYTEs    ASCIZ transfer agent version number
  468.  27h 13 BYTEs    ASCIZ resident loader name
  469.  34h  5 BYTEs    ASCIZ resident loader version number
  470.  39h 21 BYTEs    ASCIZ remote CSID
  471.  4Eh 13 BYTEs    ASCIZ resident manager name
  472.  5Bh  5 BYTEs    ASCIZ resident manager version number
  473.  60h 32 BYTEs    reserved
  474. Note:    the Intel Connection CoProcessor and SatisFAXtion may be distinguished
  475.       by examining the byte at offset 14h
  476.  
  477. Bitfields for Connection CoProcessor connection status flags:
  478. Bit(s)    Description    (Table 2251)
  479.  7    hardware busy sending or receiving
  480.  6    last page of data
  481.  5    no data on current page
  482.  4    retransmit request for current page being transmitted
  483.  3    NSF (nonstandard file) mode active
  484.  2-0    reserved
  485.  
  486. Bitfields for communications status:
  487. Bit(s)    Description    (Table 2252)
  488.  7    originating call
  489.  6    FAX message to be sent
  490.  5    on line
  491.  4    ring detected and receive enabled
  492.  3    buffer dumped on receive
  493.  2-0    hardware sequence state
  494.     000 idle
  495.     001 dial
  496.     010 answer
  497.     011 transmit
  498.     100 receive
  499.     101 pre-message
  500.     110 post-message
  501.     111 disconnect
  502.  
  503. Bitfields for Connection CoProcessor hardware status:
  504. Bit(s)    Description    (Table 2253)
  505.  7    modem option installed
  506.  6    Connection CoProcessor has control of DAA (not latched)
  507.  5    on line (not latched)
  508.  4    ring detected (not latched)
  509.  3    data in command buffer (not latched)
  510.  2    set if using DMA channel 1, clear if using DMA channel 3
  511.  1    line length compensation 1 set (not latched)
  512.  0    line length compensation 0 set (not latched)
  513.  
  514. Bitfields for Connection CoProcessor switch states:
  515. Bit(s)    Description    (Table 2254)
  516.  7    reserved
  517.  6    unused
  518.  5    spare switch open
  519.  4    FAX ADR1 switch open
  520.  3    FAX ADR0 switch open
  521.  2    alternate interrupt switch open
  522.  1    COM SEL 1 switch open
  523.  0    COM SEL 0 switch open
  524. Note:    valid combinations of 0-2 are
  525.     000  COM2 IRQ3 IObase 2F8h
  526.     001  COM1 IRQ4 IObase 3F8h
  527.     010  COM4 IRQ3 IObase 2E8h
  528.     011  COM3 IRQ4 IObase 3E8h
  529.     110  COM4 IRQ2 IObase 2E8h
  530.     111  COM3 IRQ5 IObase 3E8h
  531.  
  532. Bitfields for communications flags:
  533. Bit(s)    Description    (Table 2255)
  534.  7    reserved
  535.  6    auxiliary relay forced ON
  536.  5    modem select relay forced ON
  537.  4    offhook relay forced ON
  538.  3    9600 bps enabled
  539.  2    7200 bps enabled
  540.  1    4800 bps enabled
  541.  0    2400 bps enabled
  542.  
  543. Bitfields for SatisFAXtion connection status flags:
  544. Bit(s)    Description    (Table 2256)
  545.  7    busy in T.30 CCITT fax protocol
  546.  6    data on current page/file (only used for block xfers)
  547.  5    retransmission of last page requested
  548.  4    in file transfer mode
  549.  3    data in buffer
  550.  2    data buffer dumped on receive
  551.  1    200x100 dpi resolution instead of 200x200 dpi
  552.  0    data modem in use, FAX image modem not available
  553.  
  554. Bitfields for SatisFAXtion board state:
  555. Bit(s)    Description    (Table 2257)
  556.  7    reserved
  557.  6    handset jack active, data and FAX modems not available
  558.  5-3    current rate
  559.     000  300 bps (V.21 HDLC)
  560.     100 2400 bps (V.27 ter)
  561.     101 4800 bps (V.27 ter)
  562.     110 7200 bps (V.29)
  563.     111 9600 bps (V.29)
  564.  2-0    T.30 CCITT protocol state
  565.     000 idle
  566.     001 dialing
  567.     010 answering
  568.     011 transmitting
  569.     100 receiving
  570.     101 pre-message
  571.     110 post-message
  572.     111 disconnect
  573. --------F-2FCB13DL00-------------------------
  574. INT 2F - Communicating Applications Specification - GET DIAGNOSTICS RESULTS
  575.     AX = CB13h
  576.     DL = 00h
  577. Return: AX = 0040h in progress
  578.        >= 0       passed
  579.        < 0       hardware-dependent failure code (see #2258,#2259)
  580. SeeAlso: AX=CB13h/DL=01h
  581.  
  582. Bitfields for Intel Connection CoProcessor failure codes:
  583. Bit(s)    Description    (Table 2258)
  584.  3    9600 bps FAX modem module failed
  585.  2    SDLC chip failed
  586.  1    RAM failed
  587.  0    ROM checksum failed
  588.  
  589. Bitfields for Intel SatisFAXtion failure codes:
  590. Bit(s)    Description    (Table 2259)
  591.  1    2400 bps data modem failed
  592.  0    9600 bps FAX modem failed
  593. --------F-2FCB13DL01-------------------------
  594. INT 2F - Communicating Applications Specification - START DIAGNOSTICS
  595.     AX = CB13h
  596.     DL = 01h
  597. Return: AX = 0000h successfully started
  598.     AX < 0       error code (see #2242)
  599. SeeAlso: AX=CB13h/DL=00h
  600. --------F-2FCB14-----------------------------
  601. INT 2F - Communicating Applications Specification - MOVE RECEIVED FILE
  602.     AX = CB14h
  603.     BX = event handle
  604.     CX = receive file number
  605.         0001h first received file
  606.         N      Nth received file
  607.     DS:DX -> ASCIZ string specifying new name for file (must not exist)
  608. Return: AX = 0000h successful
  609.     AX < 0       error code (see #2242)
  610. --------F-2FCB15-----------------------------
  611. INT 2F - Communicating Applications Specification - SUBMIT FILE TO SEND
  612.     AX = CB15h
  613.     DS:DX -> variable-length data area (see #2260)
  614. Return: AX >= 0 event handle
  615.     AX < 0    error code (see #2242)
  616. SeeAlso: AX=CB01h
  617.  
  618. Format of CAS file submission data area:
  619. Offset    Size    Description    (Table 2260)
  620.  00h    BYTE    transfer type
  621.         00h = 200x200 dpi, fax mode
  622.         01h = 100x200 dpi, fax mode
  623.         02h = file transfer mode
  624.         03h to 7Fh reserved
  625.  01h    BYTE    text size
  626.         00h = 80 columns
  627.         01h = 132 columns
  628.         02h to 7Fh reserved
  629.  02h    WORD    time to send (DOS packed time, see #0971 at INT 21/AX=5700h)
  630.  04h    WORD    date to send (DOS packed date, see #0972 at INT 21/AX=5700h)
  631.  06h 32 BYTEs    ASCIZ destination name
  632.  26h 80 BYTEs    ASCIZ name of file to send
  633.  76h 47 BYTEs    ASCIZ phone number to dial
  634.  A5h 64 BYTEs    ASCIZ application-specific tag string
  635.  E5h    BYTE    reserved (00h)
  636.  E6h    BYTE    cover page
  637.         00h don't send cover page
  638.         01h send cover page
  639.         02h to 7Fh reserved
  640.  E7h 23 BYTEs    reserved (zeros)
  641.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  642.         set to 01h)
  643. --------F-2FCB16BX1234-----------------------
  644. INT 2F - Communicating Applications Spec v1.2+ - UNLOAD RESIDENT MANAGER
  645.     AX = CB16h
  646.     BX = 1234h
  647.     CX = 5678h
  648.     DX = 9ABCh
  649. Return: AX = 0000h successful
  650.     AX < 0       error code
  651. Note:    the MTEZ XpressFax CASMGR ignores the values in BX,CX, and DX
  652. SeeAlso: AX=C000h/BX=444Bh,AX=CB00h
  653. Index:    uninstall;CAS Manager
  654. --------F-2FCB17-----------------------------
  655. INT 2F - Communicating Applications Spec v1.2+ - SET COVER PAGE STATUS
  656.     AX = CB17h
  657.     BX = event handle
  658.     CL = cover page status
  659.         00h not read
  660.         01h read by user
  661. Return: AX = 0000h successful
  662.     AX < 0       error code
  663. --------F-2FCB80-----------------------------
  664. INT 2F - Intel SatisFAXtion CASMGR - ???
  665.     AX = CB80h
  666.     ???
  667. Return: ???
  668. --------F-2FCB81-----------------------------
  669. INT 2F - Intel SatisFAXtion CASMGR - ???
  670.     AX = CB81h
  671.     ???
  672. Return: ???
  673. --------F-2FCB82-----------------------------
  674. INT 2F - Intel SatisFAXtion CASMGR - ???
  675.     AX = CB82h
  676.     ???
  677. Return: ???
  678. --------F-2FCBDCBL56-------------------------
  679. INT 2F - Comwave Microfax Specification - GET STATUS ARRAY
  680.     AX = CBDCh
  681.     BL = 56h
  682.     BH = line number (starts with 1)
  683.     CX:DX -> 32-byte status buffer or 80 character string
  684. Return: AX = number of cards installed, or FFFFh on error
  685. Program: Comwave manufacturers the Microfax line of fax cards which are a high-
  686.       performance multi-card FAX solution for OEMs.
  687. Note:    defaults to AH=CBh but can be changed
  688. SeeAlso: AX=CBDDh,AX=DA00h
  689. --------F-2FCBDDBL56-------------------------
  690. INT 2F - Comwave Microfax Specification - COMMAND SUBMISSION
  691.     AX = CBDDh
  692.     BL = 56h
  693.     BH = ?
  694.     CX:DX -> command to execute
  695. Return: AX = status
  696.         0000h success
  697.         FFFFh on error
  698. SeeAlso: AH=2Ah,AX=CBDCh,AX=80FBh
  699. --------c-2FCC--SI5453-----------------------
  700. INT 2F U - PC-Kwik Programs - API
  701.     AH = CCh
  702.     SI = 5453h or 7473h
  703.     AL = function number (at least 00h,01h,04h,05h,07h,80h)
  704.     DL = program identifier (see #2261)
  705. Return: SI = 7473h
  706.     other registers vary by function
  707. Note:    Qualitas Qcache v4.00 is an OEM version of Super PC-Kwik v4.00, and
  708.       thus supports this call
  709. SeeAlso: INT 21/AH=2Bh/CX=4358h
  710.  
  711. (Table 2261)
  712. Values for PC-Kwik program identifier:
  713.  00h    all installed PowerPak programs
  714.  01h    SUPERPCK/SUPER/QCACHE v4.00+ (disk cache)
  715.  02h    PCKSPL (print spooler)
  716.  04h    PCKSCRN (screen accelerator)
  717.  05h    PCKKEY (keyboard enhancer)
  718.  06h    PCKRAMD (RAM disk)
  719.  08h    PCKWIK.SYS
  720.  10h    PCKCDROM (CD-ROM support for SUPERPCK)
  721. --------N-2FCC00-----------------------------
  722. INT 2F - Tsoft NFSDRVR - INSTALLATION CHECK
  723.     AX = CC00h
  724. Return: AX = 7777h
  725.     BX = ???
  726.     CX = ???
  727.     DX = ???
  728.     ES = data segment of resident portion
  729. SeeAlso: AX=CC01h,AX=CC06h
  730. --------N-2FCC01-----------------------------
  731. INT 2F - Tsoft NFSDRVR - ???
  732.     AX = CC01h
  733.     ???
  734. Return: ???
  735. SeeAlso: AX=CC00h
  736. --------N-2FCC02-----------------------------
  737. INT 2F - Tsoft NFSDRVR - ???
  738.     AX = CC02h
  739.     ???
  740. Return: ???
  741. SeeAlso: AX=CC00h
  742. --------N-2FCC03-----------------------------
  743. INT 2F - Tsoft NFSDRVR - ???
  744.     AX = CC03h
  745.     ???
  746. Return: ???
  747. SeeAlso: AX=CC00h
  748. --------N-2FCC04-----------------------------
  749. INT 2F - Tsoft NFSDRVR - ???
  750.     AX = CC04h
  751.     ???
  752. Return: ???
  753. SeeAlso: AX=CC00h
  754. --------N-2FCC05-----------------------------
  755. INT 2F - Tsoft NFSDRVR - ???
  756.     AX = CC05h
  757.     ???
  758. Return: ???
  759. SeeAlso: AX=CC00h
  760. --------N-2FCC06-----------------------------
  761. INT 2F - Tsoft NFSDRVR - ???
  762.     AX = CC06h
  763.     ???
  764. Return: ???
  765. SeeAlso: AX=CC00h
  766. --------P-2FCD00-----------------------------
  767. INT 2F - Intel Image Processing Interface - INSTALLATION CHECK
  768.     AX = CD00h
  769. Return: AL = state
  770.         00h not installed, OK to install
  771.         01h not installed, not OK to install
  772.         FFh installed
  773. SeeAlso: AX=CD02h"Image"
  774. --------P-2FCD00-----------------------------
  775. INT 2F - LaserPort Interface - INSTALLATION CHECK
  776.     AX = CD00h
  777. Return: AL = status
  778.         FFh installed
  779. SeeAlso: AX=CD0Fh"LaserPort"
  780. --------U-2FCD00-----------------------------
  781. INT 2F - SWELL.EXE - INSTALLATION CHECK
  782.     AX = CD00h
  783. Return: AX = 00FFh installed
  784.         BH = major version
  785.         BL = minor version
  786. Program: SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  787.       process with INT 21/AH=4Bh
  788. --------s-2FCD00BX464F-----------------------
  789. INT 2F - Forte/Gravis ULTRAMID - INSTALLATION CHECK
  790.     AX = CD00h
  791.     BX = 464Fh ('FO')
  792.     CX = 5254h ('RT')
  793.     DX = 4520h ('E ')
  794. Return: AL = FFh if installed
  795.         BX = 4155h ('AU')
  796.         CX = 4449h ('DI')
  797.         DX = 4F20h ('O ')
  798.         ES:SI -> program ID string
  799. Program: ULTRAMID is a MIDI driver for the Gravis UltraSound which allows use
  800.       of AIL drivers with other software
  801. Range:    AH=CDh-ECh, selected by scanning for an available multiplex number
  802. SeeAlso: INT 21/AX=FD12h
  803. --------P-2FCD01-----------------------------
  804. INT 2F - Intel Image Processing Interface - SET DEVICE NAME
  805.     AX = CD01h
  806.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  807. Return: AL = status
  808.         00h successful
  809.         CX:BX -> internal character device name
  810.         80h error
  811. --------U-2FCD01-----------------------------
  812. INT 2F - SWELL.EXE - SUSPEND ONCE
  813.     AX = CD01h
  814. Return: AX = 0000h
  815. SeeAlso: AX=CD02h"SWELL"
  816. --------P-2FCD02-----------------------------
  817. INT 2F - Intel Image Processing Interface - GET VERSION NUMBER
  818.     AX = CD02h
  819. Return: AL = status
  820.         00h/01h successful
  821.         BH = major version number (BCD)
  822.         BL = minor version number (BCD)
  823.         80h error
  824. Note:    if return AL = 01h, the IPI supports network redirection
  825. SeeAlso: AX=CD00h"Image"
  826. --------U-2FCD02-----------------------------
  827. INT 2F - SWELL.EXE - SUSPEND
  828.     AX = CD02h
  829. Return: AX = 0000h
  830. SeeAlso: AX=CD03h"SWELL"
  831. --------P-2FCD03-----------------------------
  832. INT 2F - Intel Image Processing Interface - SELECT SCAN LINE
  833.     AX = CD03h
  834.     BX = scan line
  835.     CX = requested density in dots per inch (300, 600, or 1200)
  836. Return: AL = status (see also AX=CD04h"Image")
  837.         00h successful
  838.         CX = density at which scan line was mapped
  839.         ES:DI -> start of scan line
  840.         80h unsuccessful
  841.         81h scan line out of range
  842.         82h unsupported scan line density
  843.         83h out of memory
  844. SeeAlso: AX=CD04h"Image"
  845. --------U-2FCD03-----------------------------
  846. INT 2F - SWELL.EXE - ACTIVATE
  847.     AX = CD03h
  848. Return: AX = 0000h
  849. SeeAlso: AX=CD02h"SWELL"
  850. --------P-2FCD04-----------------------------
  851. INT 2F - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  852.     AX = CD04h
  853.     CX:BX -> structure (see #2263)
  854. Return: AL = status (see #2262)
  855. SeeAlso: AX=CD03h"Image"
  856.  
  857. (Table 2262)
  858. Values for IPI function status:
  859.  00h    successful
  860.  80h    unsuccessful
  861.  81h    scan line out of range
  862.  82h    unsupported scan line density
  863.  83h    out of memory
  864.  84h    unrecognized source
  865.  85h    initialization error
  866.  
  867. Format of structure:
  868. Offset    Size    Description    (Table 2263)
  869.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  870.  02h    DWORD    pointer to image data
  871.  06h    WORD    scan line on which to place
  872.  08h    WORD    bit offset from start of scan line at which to place
  873.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  874.  0Ch    WORD    width in bits of data
  875.  0Eh    WORD    source logical page number
  876.  10h    WORD    source handle (only if source in expanded memory)
  877.  12h    WORD    source offset (only if source in expanded memory)
  878. --------U-2FCD04-----------------------------
  879. INT 2F - SWELL.EXE - TURN OFF VERBOSE MODE
  880.     AX = CD04h
  881. Return: AX = 0000h
  882. SeeAlso: AX=CD05h"SWELL"
  883. --------P-2FCD05-----------------------------
  884. INT 2F - Intel Image Processing Interface - PRINT PAGE
  885.     AX = CD05h
  886. Return: AL = status (00h,80h) (see #2262)
  887. Note:    page image is retained, so multiple calls will print multiple copies of
  888.       the page
  889. SeeAlso: AX=CD06h"Image"
  890. --------U-2FCD05-----------------------------
  891. INT 2F - SWELL.EXE - TURN ON VERBOSE MODE
  892.     AX = CD05h
  893. Return: AX = 0000h
  894. SeeAlso: AX=CD04h"SWELL"
  895. --------P-2FCD06-----------------------------
  896. INT 2F - Intel Image Processing Interface - CLEAR PAGE
  897.     AX = CD06h
  898. Return: AL = status (00h,80h) (see #2262)
  899. Note:    palette is reset to default
  900. SeeAlso: AX=CD09h"Image"
  901. --------U-2FCD06-----------------------------
  902. INT 2F - SWELL.EXE - UNINSTALL
  903.     AX = CD06h
  904. Return: AX = status
  905.         0000h uninstalled
  906.         8002h programs still swapped, not uninstalled
  907. --------P-2FCD07-----------------------------
  908. INT 2F - Intel Image Processing Interface - reserved
  909.     AX = CD07h
  910. SeeAlso: AX=CD00h"Image"
  911. --------U-2FCD07-----------------------------
  912. INT 2F - SWELL.EXE - GET INFO
  913.     AX = CD07h
  914.     ES:BX -> 32-byte buffer for info (see #2264)
  915. Return: AX = status
  916.         0000h successful
  917.         ES:BX buffer filled
  918.         8001h buffer wrong size
  919.  
  920. Format of SWELL.EXE info buffer:
  921. Offset    Size    Description    (Table 2264)
  922.  00h    WORD    20h  (total size of buffer)
  923.  02h    BYTE    suspend-once mode active if nonzero
  924.  03h    BYTE    00h active, 01h suspended
  925.  04h    BYTE    00h quiet, 01h verbose
  926.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  927.  06h 26 BYTEs    unused???
  928. --------P-2FCD08-----------------------------
  929. INT 2F - Intel Image Processing Interface - SCREEN IMAGE
  930.     AX = CD08h
  931.     CX:BX -> structure (see #2265)
  932. Return: AL = status (00h,80h-85h) (see #2262)
  933. SeeAlso: AX=CD05h"Image",AX=CD09h"Image"
  934.  
  935. Format of IPI screen image structure:
  936. Offset    Size    Description    (Table 2265)
  937.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  938.  02h    DWORD    pointer to image data
  939.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  940.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  941.  0Ah    WORD    left cropping (currently must be zero)
  942.  0Ch    WORD    top cropping (currently must be zero)
  943.  0Eh    WORD    width (currently must be 8000h)
  944.  10h    WORD    height (currently must be 8000h)
  945.  12h    WORD    horizontal size of image in 1200 dpi units
  946.  14h    WORD    vertical size of image in 1200 dpi units
  947.  16h    WORD    aspect ratio (currently reserved)
  948.  18h    WORD    initialization flag (if 01h, initialization is performed)
  949.  1Ah    WORD    pixels per line of source data
  950.  1Ch    WORD    number of scan lines in source data
  951.  1Eh    WORD    number of scan lines in packet
  952.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  953.  22h    WORD    pixels per byte (1,2,4, or 8)
  954.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  955.  26h    WORD    source page number (if in expanded memory)
  956.  28h    WORD    source handle (if in expanded memory)
  957.  2Ah    WORD    source offset (if in expanded memory)
  958. --------U-2FCD08-----------------------------
  959. INT 2F - SWELL.EXE - UNUSED
  960.     AX = CD08h
  961. Return: AX = FFFFh (error)
  962. --------P-2FCD09-----------------------------
  963. INT 2F - Intel Image Processing Interface - LOAD SCREEN
  964.     AX = CD09h
  965.     CX:BX -> structure (see #2266)
  966. Return: AL = status (00h,80h) (see #2262)
  967. SeeAlso: AX=CD06h"Image Processing",AX=CD0Ah"Image Processing"
  968.  
  969. Format of IPI load screen structure:
  970. Offset    Size    Description    (Table 2266)
  971.  00h    BYTE    style
  972.         44h ('D') diamond style
  973.         4Ch ('L') line style
  974.  01h    BYTE    reserved (00h)
  975.  02h    WORD    frequency in lines per inch [sic]
  976.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  977.  04h    WORD    screen angle in degrees (-360 to 360)
  978.         currently coerced to nearest of -45, 0, 45, or 90
  979. --------U-2FCD09-----------------------------
  980. INT 2F - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  981.     AX = CD09h
  982. Return: AX = 0000h
  983. SeeAlso: AX=CD0Ah"SWELL"
  984. --------P-2FCD0A-----------------------------
  985. INT 2F - Intel Image Processing Interface - LOAD PALETTE
  986.     AX = CD0Ah
  987.     CX:BX -> palette structure (see #2267)
  988. Return: AL = status (00h,80h) (see #2262)
  989. SeeAlso: AX=CD09h"Image Processing"
  990.  
  991. Format of IPI palette structure:
  992. Offset    Size    Description    (Table 2267)
  993.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  994.  01h    2**N    palette translation values, one per possible pixel value
  995. --------U-2FCD0A-----------------------------
  996. INT 2F - SWELL.EXE - TURN ON "BORLAND SUPPORT"
  997.     AX = CD0Ah
  998. Return: AX = 0000h
  999. SeeAlso: AX=CD09h"SWELL"
  1000. --------P-2FCD0F-----------------------------
  1001. INT 2F - LaserPort Interface - EXECUTE FUNCTION
  1002.     AX = CD0Fh
  1003.     BL = function
  1004.         01h enable
  1005.         02h disable
  1006.         03h ???
  1007. Return: AL = status
  1008.         00h success
  1009. SeeAlso: AX=CD00h"LaserPort"
  1010. --------K-2FCF00-----------------------------
  1011. INT 2F - TEMPLEXX 1.0 - INSTALLATION CHECK
  1012.     AX = CF00h
  1013. Return: AL = FFh if installed
  1014. Program: TEMPLEXX is a popup keyboard template by Henson Scientific, Inc.
  1015. Note:    values in AL other than 00h cause an immediate return without modifying
  1016.       any registers
  1017. --------G-2FD000-----------------------------
  1018. INT 2F C - MDEBUG display driver - GET DRIVER STATUS
  1019.     AX = D000h
  1020. Return: CF set on error
  1021.         all other registers must be unchanged)
  1022.     CF clear if successful
  1023.         AL = FFh
  1024.         AH = driver semaphor
  1025.         00h driver is not active
  1026.         01h driver is active
  1027.         BX = CS of the driver
  1028.         CX = driver version (CH = major, CL = minor, must be >= 013Ch)
  1029.         DL = buffer semaphor
  1030.         00h driver is not pending
  1031.         01h driver is pending between functions 02h and 03h
  1032.         DH = show semaphor
  1033.         00h driver is not pending
  1034.         01h driver is pending between functions 04h and 05h
  1035. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1036.       Schemmer, including a memory monitor, an interpreter and a
  1037.       disassembler
  1038. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1039. Notes:    MDEBUG can use any two consecutive multiplex numbers between C0h and
  1040.       FFh; the default is D0h for the display driver and D1h for the
  1041.       command driver (see INT 60/AH=00h"MDEBUG" for the actual multiplex
  1042.       numbers used)
  1043.     this function MUST be reentrant, as MDEBUG calls it after every popup
  1044.       before any other actions.  The handler should not change any
  1045.       registers if the display is in an unsupported mode or in a mode
  1046.       MDEBUG supports itself, e.g. a normal text mode with at least 80x25
  1047.       characters (i.e. 80x43 or 132x44 (v1.60+)). In this case MDEBUG will
  1048.       not call any of the other functions for this popup session.
  1049.     MDEBUG will not call the other functions if the returned version is
  1050.       less than the actual version of MDEBUG.
  1051.     if the driver is reentrant, DL and DH should be 00h
  1052. SeeAlso: AX=D001h,AX=D002h,AX=D003h,AX=D004h,AX=D005h
  1053. --------M-2FD000-----------------------------
  1054. INT 2F - ZWmous - INSTALLATION CHECK
  1055.     AX = D000h
  1056. Return: AX = 5A57h ("ZW") if installed
  1057.         BX = segment of resident code
  1058. Program: ZWmous is a shareware TSR by Zen Wu which permits the use of a mouse
  1059.       with many non-mouse applications by entering the letter under the
  1060.       mouse cursor on button presses
  1061. SeeAlso: INT 33/AX=0003h
  1062. --------N-2FD000-----------------------------
  1063. INT 2F - Lotus CD/Networker - INSTALLATION CHECK
  1064.     AX = D000h
  1065. Return: AL = FFh if CD/Networker TSR is loaded
  1066.     BX = 4D44h ("MD") signature
  1067.     CX = Windows mode word (from INT 2F/AX=1600h) at time of TSR load
  1068.     DX = bitmap identifying all loaded CD/Networker TSRs.
  1069. Notes:    INT 2F/AH=D0h is used by CD/Networker to communicate between a
  1070.       resident redirector TSR and a transient program that controls the
  1071.       TSR's CD-ROM drive emulation (volume attachments, caching, etc).
  1072.     At present there is only one CD/Networker TSR; the bitmap always = 4.
  1073. SeeAlso: AX=D002h"Lotus",INT 2F/AX=1500h"CD-ROM"
  1074. --------G-2FD001-----------------------------
  1075. INT 2F C - MDEBUG display driver - INITIALIZE DRIVER
  1076.     AX = D001h
  1077. Return: CF set on error
  1078.     AL = driver semaphor
  1079.     AH = buffer semaphor
  1080. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1081. Notes:    MDEBUG calls this function after every successful call of the function
  1082.       00h. The function should reset all internal data and the status of
  1083.       the driver. If this function returns an error, MDEBUG will not call
  1084.       the other functions in this popup session.
  1085.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1086.       FFh; the default is D0h for the display driver and D1h for the
  1087.       command driver
  1088. SeeAlso: AX=D000h
  1089. --------G-2FD002-----------------------------
  1090. INT 2F C - MDEBUG display driver - SAVE GRAPHIC DATA
  1091.     AX = D002h
  1092. Return: CF set on error
  1093.     CF clear if successful
  1094.         display memory saved and display switched to one of the text modes
  1095.           02h, 03h or 07h.
  1096. Note:    MDEBUG calls this function only once every popup session before
  1097.       displaying its windows.
  1098. SeeAlso: AX=D000h,AX=D003h
  1099. --------N-2FD002BX4D44-----------------------
  1100. INT 2F - Multiplex - Lotus CD/Networker GET DATA AREA
  1101.     AX = D002h
  1102.     BX = 4D44h
  1103.     DX = bitmap identifying one loaded CD/Networker TSR
  1104. Return: ES:DI -> data area owned by TSR
  1105. Note:    the format of the data area changes with each minor revision, so it
  1106.       cannot be counted on
  1107. SeeAlso: AX=D000h"Lotus"
  1108. --------G-2FD003-----------------------------
  1109. INT 2F C - MDEBUG display driver - RESTORE GRAPHIC DATA
  1110.     AX = D003h
  1111. Return: CF set on error
  1112.     CF clear if successful
  1113.         display restored to the mode it was in before calling AX=D002h and
  1114.           the display memory is restored
  1115. Note:    MDEBUG calls this function only once every popup session just before
  1116.      it exits to normal DOS.
  1117. SeeAlso: AX=D000h,AX=D002h
  1118. --------G-2FD004-----------------------------
  1119. INT 2F - MDEBUG display driver - SHOW SAVED DATA
  1120.     AX = D004h
  1121. Return: CF set on error
  1122.     CF clear if successful
  1123.         display switched to mode it was in before calling AX=D002h and the
  1124.           display memory is restored
  1125. Note:    This function needn't save the display memory before changing it.
  1126. SeeAlso: AX=D000h,AX=D005h
  1127. --------G-2FD005-----------------------------
  1128. INT 2F - MDEBUG display driver - SWITCH BACK TO TEXT SCREEN
  1129.     AX = D005h
  1130. Return: CF set on error
  1131.     CF clear if successful
  1132.         display restored to mode it was in before calling AX=D004h
  1133. Note:    This function needn't save or change the display memory
  1134. SeeAlso: AX=D000h,AX=D004h
  1135. --------G-2FD0-------------------------------
  1136. INT 2F - MDEBUG display driver - RESERVED FUNCTION NUMBERS
  1137.     AH = D0h
  1138.     AL = 06h-7Fh
  1139. Note:    these functions are reserved for future use
  1140. --------G-2FD0-------------------------------
  1141. INT 2F - MDEBUG display driver - USER DEFINED FUNCTION NUMBERS
  1142.     AH = D0h
  1143.     AL = 80h-FFh
  1144. Note:    these functions numbers are reserved for user defined features (e.g.
  1145.       communication between the transient und resident parts of the driver)
  1146. --------G-2FD100-----------------------------
  1147. INT 2F C - MDEBUG command driver - GET STATUS
  1148.     AX = D100h
  1149.     BX = version of MDEBUG (BH = major, BL = minor)
  1150.     CX = command driver counter
  1151. ---v1.60+---
  1152.     DS:SI -> MDEBUG identification table (see #2268)
  1153.     ES = segment of display memory used by MDEBUG
  1154.     DI = size of video mode used by MDEBUG
  1155.         (high byte = lines, low byte = columns)
  1156. Return: DL = FFh
  1157.     BX = version number of the driver if it is less than the version in BX,
  1158.           else unchanged
  1159.     CX incremented
  1160. Program: MDEBUG is a shareware memory-resident debugging tool by Bernd
  1161.       Schemmer, including a memory monitor, an interpreter, and a
  1162.       disassembler
  1163. Range:    AH=C0h to AH=FFh, selected by switch or programmatically
  1164. Notes:    called by MDEBUG at start of popup session; if the version number
  1165.       returned in BX is less than 1.52 (1.60 for MDEBUG v1.70), MDEBUG will
  1166.       not call any of the other functions during this popup session
  1167.     MDEBUG can use any two consecutive multiplex numbers between C0h and
  1168.       FFh; the default is D0h for the display driver and D1h for the
  1169.       command driver (see INT 60/AH=00h"MDEBUG" for the multiplex numbers
  1170.       actually used)
  1171.     this function must end with a far call to the old INT 2F handler after
  1172.       changing the registers
  1173.     this function MUST be reentrant
  1174.     command drivers must also declare the following data at the given
  1175.       offsets in the code segment
  1176.         100h  3 BYTEs    JMP-command in .COM-files
  1177.         103h    BYTE    NOP-command (90h)
  1178.         104h 26 BYTEs    signature "Kommandotreiber für MDEBUG"
  1179.         11Eh 12 BYTEs    name of driver, e.g. "MDHISDRV.COM"
  1180.                 each driver must have a unique name
  1181.     MDEBUG will pass every key and command to the command driver(s) before
  1182.       checking for a valid internal command
  1183. SeeAlso: AX=D000h,AX=D101h
  1184.  
  1185. Format of MDEBUG identification table:
  1186. Offset    Size    Description    (Table 2268)
  1187.  -2    WORD    entry offset
  1188.  00h    WORD    CS of MDEBUG
  1189.  02h    DWORD    old INT 08h vector
  1190.  06h    DWORD    old INT 09h vector
  1191.  0Ah    DWORD    address INT 16h routine used by MDEBUG
  1192.  0Eh    BYTE    length of version string
  1193.  0Fh  N BYTEs    version string
  1194. --------G-2FD101-----------------------------
  1195. INT 2F - MDEBUG command driver - INITIALIZE DRIVER
  1196.     AX = D101h
  1197.     CX = command driver counter
  1198. Return: DL = status
  1199.         FFh if successful
  1200.         CX incremented
  1201.         else error: all registers unchanged
  1202. Note:    this function must end with a  far call to the old INT 2F handler after
  1203.       changing the registers
  1204.     this function must be reentrant
  1205. --------G-2FD102-----------------------------
  1206. INT 2F - MDEBUG command driver - EXECUTE INTERPRETER COMMAND
  1207.     AX = D102h
  1208.     BL = first character of the interpreter command
  1209.     BH = last character of the interpreter command (or blank)
  1210.     DS:SI -> parameter for the interpreter command as ASCIZ string
  1211.     DS:DI -> MDEBUG data structure (see #2270)
  1212. Return: AL = FFh
  1213.     CF set on error
  1214.         AH = error number (see #2269)
  1215.         DS:SI -> ASCIZ error message (max 30 characters) if AH=0Ch
  1216.     CF clear if successful
  1217.         AH = return code
  1218.         00h continue processing the command line
  1219.         01h leave MDEBUG popup session
  1220.         02h leave MDEBUG popup session and automatically popup again
  1221.               if the InDOS flag is zero
  1222.         03h not used (same as 00h)
  1223.         04h not used (same as 00h)
  1224.         05h put new command line into the input buffer,
  1225.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1226.         06h process new command line
  1227.             DS:SI -> new command line (ASCIZ string, max 66 chars)
  1228.            else unknown status, but continue processing commmand line
  1229. Note:    this function must end with a far call to the old INT 2F handler (with
  1230.       registers unchanged) if the driver does not support the interpreter
  1231.       command in BX.  Otherwise, the driver must not chain to the old
  1232.       INT 2F.
  1233.  
  1234. (Table 2269)
  1235. Values for MDEBUG error number:
  1236.  01h    syntax error
  1237.  02h    first shell of the command.com is activ
  1238.  03h    Esc pressed
  1239.  04h    break pressed
  1240.  05h    DOS is busy
  1241.  06h    command ended
  1242.  07h    division by zero
  1243.  08h    invalid display driver
  1244.  09h    invalid command driver
  1245.  0Ah    error 8 and 9
  1246.  0Bh    unknown error
  1247.  0Ch    new error
  1248.  else    unknown error
  1249.  
  1250. Format of MDEBUG data structure:
  1251. Offset    Size    Description    (Table 2270)
  1252.  00h    WORD    register SE
  1253.  02h    WORD    register OF
  1254.  04h    WORD    register FS
  1255.  06h    WORD    register FO
  1256.  08h    WORD    register AX
  1257.  0Ah    WORD    register BX
  1258.  0Ch    WORD    register CX
  1259.  0Eh    WORD    register DX
  1260.  10h    WORD    register SI
  1261.  12h    WORD    register DI
  1262.  14h    WORD    register DS
  1263.  16h    WORD    register ES
  1264.  18h    WORD    register BP
  1265.  1Ah    WORD    register SS
  1266.  1Ch    WORD    register SP
  1267.  1Eh    WORD    register FL (flags)
  1268.  20h    WORD    register R0
  1269.  22h    WORD    register R1
  1270.  24h    WORD    register R2
  1271.  26h    WORD    register R3
  1272.  28h    WORD    register R4
  1273.  2Ah    WORD    register R5
  1274.  2Ch    WORD    register R6
  1275.  2Eh    WORD    register R7
  1276.  30h    WORD    register R8
  1277.  32h    WORD    register CS, return-address
  1278.  34h    WORD    register IP, return-address
  1279.  36h    DWORD    saved pointer to data for key <F6> (v1.60)
  1280.         saved monitor address (v1.70)
  1281.  3Ah 12 WORDs    saved register values on last popup entry (for <F8> key)
  1282.         (original register values at popup entry of MDEBUG)
  1283.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1284.  52h 12 WORDs    saved register values on last popup exit (for <SHIFT-F8> key)
  1285.         AX, BX, CX, DX, SI, DI, DS, ES, BP, SS, SP, flags
  1286.  6Ah    DWORD    address of the DOS-invars-table
  1287.  6Eh    DWORD    address of the InDOS flag
  1288.  72h    WORD    offset of the register which is used for the segment of the
  1289.           first monitor window
  1290.  74h    WORD    offset of the register which is used for the offset of the
  1291.           first monitor window
  1292.  76h    WORD    name of the register which is used for the segment of the
  1293.           first monitor segment
  1294.  78h    WORD    name of the register which is used for the offset of the first
  1295.           monitor window
  1296.  7Ah    WORD    pseudo register 1
  1297.  7Ch    WORD    pseudo register 2
  1298. --------G-2FD103-----------------------------
  1299. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE MONITOR
  1300.     AX = D103h
  1301.     BX = key code (like result of an interrupt 16h call)
  1302.     CX = cursor position
  1303.         0000h in the ASCII column of the monitor
  1304.         0001h in one of the hex fields of the monitor
  1305.     DS:SI -> MDEBUG data structure (see #2270)
  1306.     ES:DI -> actual byte in the monitor
  1307. Return: AL = FFh
  1308.     AH = return code
  1309.         00h key processed, read next key
  1310.         01h leave MDEBUG popup session
  1311.         02h leave MDEBUG popup session and automatically popup again if DOS
  1312.           is not busy
  1313.         03h signal an error (beep)
  1314.         04h driver has redefined the key, proceed with the new key
  1315.         BX = new key code
  1316.         MDEBUG will not pass the new key to the command driver(s)
  1317.        else treat like code 00h
  1318. Note:    this function must end with a far call to the old INT 2F handler (with
  1319.       registers unchanged) if the driver does not support the key in BX.
  1320.       Otherwise, the driver must not chain to the old INT 2F.
  1321. SeeAlso: AX=D104h
  1322. --------G-2FD104-----------------------------
  1323. INT 2F - MDEBUG command driver - EXECUTE KEY IN THE INTERPRETER
  1324.     AX = D104h
  1325.     DS:SI -> MDEBUG data structure (see #2270)
  1326. Return: AL = FFh
  1327.     AH = return code
  1328.         00h key processed, read next key
  1329.         01h leave MDEBUG popup session
  1330.         02h leave MDEBUG popup session and automactically popup again if
  1331.           DOS is not busy
  1332.         03h signal an error (beep)
  1333.         04h driver has redefined the key, proceed with the new key
  1334.         BX = new key code
  1335.         MDEBUG won't pass the new key to the command driver(s)
  1336.         05h put new command line into the input buffer
  1337.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1338.         06h process new command line
  1339.         DS:SI -> new command line (ASCIZ string, max 66 chars)
  1340.        else treat like code 00h
  1341. Note:    this function must end with a far call to the old INT 2F handler if the
  1342.       driver does not support the key in BX.  Otherwise, the driver must
  1343.       not chain to the old INT 2F.
  1344. SeeAlso: AX=D103h
  1345. --------G-2FD1-------------------------------
  1346. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1347.     AH = D1h
  1348.     AL = 05h-0Ah
  1349. Note:    these functions are reserved for future use
  1350. --------G-2FD110-----------------------------
  1351. INT 2F - MDEBUG command driver - GET ADDRESS OF THE OLD INT 2F
  1352.     AX = D110h
  1353. Return: DL = FFh
  1354.     ES:BX -> next program in the chain for INT 2F
  1355.     CX = code segment of this driver
  1356.     DI = offset of driver identification table (see #2271) (v1.60+)
  1357. Notes:    only called by the transient part of the driver
  1358.     must be reentrant and the driver must not chain this function to the
  1359.       old INT 2F
  1360.  
  1361. Format of the MDEBUG driver identification table:
  1362. Offset    Size    Description    (Table 2271)
  1363.  00h  26 BYTEs     signature "Kommandotreiber für MDEBUG"
  1364.                          ^- Note: ASCII 129,German U-umlaut
  1365.  27h  12 BYTEs     name of driver, e.g. "MDHISDRV.COM"
  1366.          each driver must have a unique name
  1367. --------G-2FD111-----------------------------
  1368. INT 2F - MDEBUG command driver - START DRIVER
  1369.     AX = D111h
  1370. Return: DL = FFh
  1371. Notes:    only called by the transient part of the driver to inform the resident
  1372.       part that it is installed
  1373.     the function must be reentrant and the driver mustn't chain this
  1374.       function to the old INT 2F
  1375. SeeAlso: AX=D101h,AX=D112h
  1376. --------G-2FD112-----------------------------
  1377. INT 2F - MDEBUG command driver - END DRIVER
  1378.     AX = D112h
  1379. Return: DL = FFh
  1380. Notes:    only called by the transient part of the driver to inform the resident
  1381.       part that it will be released after this function
  1382.     the function must be reentrant and the driver mustn't chain this
  1383.       function to the old INT 2F
  1384. SeeAlso: AX=D101h,AX=D111h
  1385. --------G-2FD1-------------------------------
  1386. INT 2F - MDEBUG command driver - RESERVED FUNCTIONS
  1387.     AH = D1h
  1388.     AL = 13h-7Fh
  1389. Note:    these functions are reserved for future use
  1390. --------G-2FD1-------------------------------
  1391. INT 2F - MDEBUG command driver - USER DEFINED FUNCTIONS
  1392.     AH = D1h
  1393.     AL = 80h-FFh
  1394. Note:    these functions are reserved for user defined features (e.g.
  1395.       communication between the transient und resident parts of the driver)
  1396. --------U-2FD200-----------------------------
  1397. INT 2F - PCL-838.EXE - INSTALLATION CHECK
  1398.     AX = D200h
  1399. Return: AL = FFh if installed??? (documented as AX = return value)
  1400. Program: PCL-838 is a resident utility for controlling a stepmotor adapter
  1401.       board by Advantec
  1402. SeeAlso: AX=D201h"PCL-838",AX=D202h"PCL-838"
  1403. --------Q-2FD200BX5144-----------------------
  1404. INT 2F - Quarterdeck RPCI - INSTALLATION CHECK
  1405.     AX = D200h
  1406.     BX = 5144h ("QD")
  1407.     CX = 4D45h ("ME")
  1408.     DX = 4D30h ("M0")
  1409. Return: AL = FFh installed
  1410.     if BX,CX,DX registers were as specified on entry:
  1411.         BX = 4D45h ("ME")
  1412.         CX = 4D44h ("MD")
  1413.         DX = 5652h ("VR")
  1414. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1415. Notes:    the Quarterdeck RPCI (Resident Program Communication Interface) is
  1416.       supported by QEMM v5.0+, QRAM, MANIFEST, VIDRAM, etc.
  1417.     for AL <> 0, if the BX/CX/DX values don't match the identifier of a
  1418.       Quarterdeck product, it just chains to the previous INT 2F handler
  1419. SeeAlso: AX=D201h/BX=4849h,AX=D201h/BX=4D41h,AX=D201h/BX=4D45h
  1420. SeeAlso: AX=D201h/BX=5145h,AX=D201h/BX=5649h
  1421. --------U-2FD201-----------------------------
  1422. INT 2F - PCL-838.EXE - UNINSTALL
  1423.     AX = D201h
  1424. Return: AX = return value
  1425. SeeAlso: AX=D200h"PCL-838",AX=D202h"PCL-838"
  1426. --------m-2FD201BX4849-----------------------
  1427. INT 2F - Quarterdeck RPCI - GET QD HIMEM PRESENCE
  1428.     AX = D201h
  1429.     BX = 4849h ("HI")
  1430.     CX = 4D45h ("ME")
  1431.     DX = 4D51h ("MQ")
  1432. Return: BX = 4F4Bh ("OK")
  1433.     ES:DI -> HIMEM entry point
  1434. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1435. SeeAlso: AX=D200h,AX=D201h/BX=5145h
  1436. --------m-2FD201BX4849-----------------------
  1437. INT 2F - Quarterdeck RPCI - QEMM/QRAM v5.0+ - GET HIRAM MEMORY CHAIN
  1438.     AX = D201h
  1439.     BX = 4849h ("HI")
  1440.     CX = 5241h ("RA")
  1441.     DX = 4D30h ("M0")
  1442. Return: BX = 4F4Bh ("OK")
  1443.     CX = segment of start of HIRAM chain
  1444.     DX = reserved block owner (QEMM/QRAM code segment)
  1445. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1446. Note:    the HIRAM memory chain has the same format as the regular DOS 4.0
  1447.       memory chain (see #0935 at INT 21/AH=52h), except that XMS Upper
  1448.       Memory Blocks have the block header program name field set to
  1449.       "UMB"; blocks whose "owner" field is set to the reserved segment
  1450.       returned in DX are locked-out regions such as video memory and ROMs.
  1451. SeeAlso: AX=12FFh/BX=0006h,AX=D200h
  1452. --------G-2FD201BX4D41-----------------------
  1453. INT 2F U - Quarterdeck RPCI - MANIFEST v1.0+ - INSTALLATION CHECK
  1454.     AX = D201h
  1455.     BX = 4D41h ("MA")
  1456.     CX = 4E49h ("NI")
  1457.     DX = 4645h ("FE")
  1458. Return: BX = 5354h ("ST") if installed
  1459. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1460. SeeAlso: AX=D200h
  1461. --------E-2FD201BX4D45-----------------------
  1462. INT 2F U - Quarterdeck RPCI - DVDOS4GX.DVR - ???
  1463.     AX = D201h
  1464.     BX = 4D45h ("ME")
  1465.     CX = 5155h ("QU")
  1466.     DX = 5044h ("PD")
  1467. Return: AL = FFh
  1468.     BX = 4F4Bh ("OK")
  1469. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1470. Note:    this function is called by QEMM 6.03
  1471.     performs a variety of actions before setting return registers
  1472. SeeAlso: AX=D200h
  1473. --------m-2FD201BX5145-----------------------
  1474. INT 2F - Quarterdeck RPCI - QEMM v5.0+ - INSTALLATION CHECK
  1475.     AX = D201h
  1476.     BX = 5145h ("QE")
  1477.     CX = 4D4Dh ("MM")
  1478.     DX = 3432h ("42")
  1479. Return: BX = 4F4Bh ("OK")
  1480.     ES:DI -> QEMM API entry point (see INT 67/AH=3Fh)
  1481. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1482. Note:    this call is not available under QEMM v6.00 unless Windows3 support
  1483.       has been disabled with the NW3 switch to QEMM386.SYS
  1484. SeeAlso: AX=D200h,AX=D201h/BX=4849h,INT 67/AH=3Fh
  1485. --------V-2FD201BX5649-----------------------
  1486. INT 2F u - Quarterdeck RPCI - VIDRAM v5.0+ - INSTALLATION CHECK
  1487.     AX = D201h
  1488.     BX = 5649h ("VI")
  1489.     CX = 4452h ("DR")
  1490.     DX = 414Dh ("AM")
  1491. Return: BX = 4F4Bh ("OK")
  1492.     ES:DI -> VIDRAM entry point (see #2272)
  1493. Range:    AH=C0h to AH=FFh, selected by scanning AH=D2h-FFh, then AH=C0h-D1h
  1494. SeeAlso: AX=D200h
  1495.  
  1496. (Table 2272)
  1497. Call VIDRAM entry point with:
  1498.     AH = 00h get status
  1499.         Return: AL = VIDRAM state (see #2273)
  1500.             BL = extra RAM status (see #2274)
  1501.             BH = feature flags (see #2275)
  1502.             CL = current monitor (01h = mono, 80h = color)
  1503.             SI = current top of memory (paragraph)
  1504.             DI = segment of start of HiRAM chain
  1505.     AH = 01h setup
  1506.         AL = VIDRAM state (see #2273)
  1507.         BL = extra RAM status (see #2274)
  1508.         BH = feature flags (see #2275)
  1509.         CL = monitor (01h = monochrome, 80h = color)
  1510.         SI = new top of memory (paragraph)
  1511.         DI = segment of start of HiRAM chain
  1512.     AH = 02h get end address of VIDRAM code
  1513.         Return: ES:DI -> VIDRAM partial map context (see #2276,#2277)
  1514. Return: CF set on error
  1515.     CF clear if successful
  1516.  
  1517. (Table 2273)
  1518. Values for VIDRAM state:
  1519.  00h    off
  1520.  01h    no EGA graphics
  1521.  02h    no graphics at all
  1522.  
  1523. (Table 2274)
  1524. Values for VIDRAM extra RAM status:
  1525.  00h    VIDRAM does not use extra RAM
  1526.  01h    VIDRAM uses EMS as extra RAM
  1527.  02h    VIDRAM uses EGA as extra RAM
  1528.  
  1529. Bitfields for VIDRAM feature flags:
  1530. Bit(s)    Description    (Table 2275)
  1531.  0    override enabled
  1532.  1    mapped memory detected in A000h-B000h range
  1533.  2    top of memory not at 640K
  1534.  3    MDA detected
  1535.  4    high RAM exists in video area
  1536.  5    mapped memory detected in video area
  1537.  6-7    reserved???
  1538.  
  1539. Format of VIDRAM partial map context (EMS 3.2):
  1540. Offset    Size    Description    (Table 2276)
  1541.  00h    BYTE    EMS version ID (32h)
  1542.  01h    WORD    EMM handle for this entry
  1543.  03h    BYTE    number of frames
  1544.  04h    BYTE    first page frame
  1545.  05h    WORD    offset from ES to previously saved map
  1546.  
  1547. Format of VIDRAM partial map context (EMS 4.0):
  1548. Offset    Size    Description    (Table 2277)
  1549.  00h    BYTE    EMS version ID (40h)
  1550.  01h    WORD    mappable segment count
  1551.  03h  N WORD    mappable segments
  1552.     WORD    offset to previously saved map???
  1553. --------U-2FD202-----------------------------
  1554. INT 2F - PCL-838.EXE - EXECUTE PCL838 COMMANDS
  1555.     AX = D202h
  1556.     CX:BX -> parameter table
  1557. Return: AX = return value
  1558. SeeAlso: AX=D200h"PCL-838",AX=D201h"PCL-838"
  1559. --------R-2FD300BX4562-----------------------
  1560. INT 2F U - TeleReplica - INSTALLATION CHECK
  1561.     AX = D300h
  1562.     BX = 4562h
  1563.     CX = 2745h
  1564.     DX = serial port I/O base address??? (03F8h for v3.9)
  1565. Return: SI = segment of resident code
  1566.     AX = 251Dh
  1567.     BX = DF21h
  1568.     CX = F321h
  1569.     DX = ???
  1570. --------R-2FD3CB-----------------------------
  1571. INT 2F U - LapLink Quick Connect v6 - API
  1572.     AX = D3CBh
  1573.     CX = function
  1574.         0002h get ???
  1575.         Return: BX:AX -> ???
  1576.             CL = ???
  1577.             CH = ???
  1578.             DX = ???
  1579.             DI = COM1 I/O port???
  1580.             SI = COM2 I/O port???
  1581.         0003h initialization???
  1582.         0004h ???
  1583.         0005h initialization???
  1584.         0006h reset/clear ???
  1585.         Return: AX = 0000h
  1586.             ES:DI -> next byte after ??? cleared by this call
  1587.         0007h initialization???
  1588.         0008h uninstall
  1589.         Return: BX = status
  1590.                 0000h successful
  1591.                 FFFFh incomplete, stub remains in memory
  1592. Return: CX = 534Bh (except function 0002h)
  1593. Index:    uninstall;LapLink Quick Connect
  1594. --------K-2FD3D3BH00-------------------------
  1595. INT 2F - KDRIVE v2.x - INSTALLATION CHECK
  1596.     AX = D3D3h
  1597.     BH = 00h
  1598. Return: BX = 3D3Dh if installed
  1599.     CF clear if installed
  1600.         AX = driver ID??? (returns 0087h for KDRIVE.EXE and 0880h for
  1601.           KDRIVOS2.EXE in one examined version)
  1602. Program: KDRIVE is a shareware extended German keyboard driver by Martin
  1603.       Austermeier, originally based on K3 by Martin Gerdes as published
  1604.       in c't magazine 7/1988
  1605. --------l-2FD44D-----------------------------
  1606. INT 2F - 4DOS.COM v2.1+ - API
  1607.     AX = D44Dh
  1608.     BH = function
  1609.         00h installation check
  1610.         Return: AX = 44DDh
  1611.             BL = major version number
  1612.             BH = minor version number
  1613.             CX = PSP segment address for current invocation
  1614.             DL = 4DOS shell number (0 for the first (root) shell,
  1615.                   updated each time a new copy is loaded)
  1616.         01h (internal, v2.1-3.03) terminate current copy of 4DOS
  1617.         Return: nothing
  1618.         (internal, v4.0) ???
  1619.         Return: AX = 44DDh
  1620.             ES:BX -> data area (see #2278)
  1621.         02h ???
  1622.         DX = ???
  1623.     ---v2.1-3.03 only---
  1624.         03h EXEC program
  1625.         CX:DX -> EXEC record (see #2279)
  1626.         FEh deallocate shell number (passed through to root shell)
  1627.         ???
  1628.         FFh allocate shell number (passed through to root shell)
  1629. Note:    bug in v3.00 will crash system if unrecognized value in BH
  1630. SeeAlso: AX=D44Eh,AX=E44Dh,INT 21/AX=4403h
  1631. Index:    installation check;4DOS|installation check;NDOS
  1632.  
  1633. Format of 4DOS v4.0 data area:
  1634. Offset    Size    Description    (Table 2278)
  1635.  00h  2 BYTEs    ???
  1636.  06h    WORD    XMS handle for swapping
  1637.     ???
  1638.  
  1639. Format of 4DOS EXEC record:
  1640. Offset    Size    Description    (Table 2279)
  1641.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  1642.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  1643.  04h    WORD    segment of environment for child process (see INT 21/AH=26h)
  1644. --------l-2FD44E-----------------------------
  1645. INT 2F C - 4DOS v3.0+ - AWAITING USER INPUT
  1646.     AX = D44Eh
  1647. ---4DOS v3.01+---
  1648.     BX = condition
  1649.         0000h 4DOS is ready to display prompt
  1650.         0001h 4DOS has displayed the prompt, about to accept user input
  1651. Return: the handler must preserve SI, DI, BP, SP, DS, ES, and SS
  1652. Note:    v3.00 only makes the call corresponding to BX=0001h, does not set BX
  1653. SeeAlso: AX=D44Dh
  1654. --------K-2FD44FBX0000-----------------------
  1655. INT 2F - 4DOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  1656.     AX = D44Fh
  1657.     BX = 0000h
  1658. Return: AX = 44DDh if installed
  1659. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  1660.       which emulate the 4DOS and NDOS keystack
  1661. SeeAlso: AX=D44Fh/BX=0001h,AX=E44Fh/BX=0000h
  1662. --------K-2FD44FBX0001-----------------------
  1663. INT 2F - 4DOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  1664.     AX = D44Fh
  1665.     BX = 0001h
  1666.     CX = number of keystrokes (01h-FFh)
  1667.     DS:DX -> keystroke list (one word per keystroke)
  1668. Return: AX = status
  1669.         0000h successful
  1670.         nonzero failed
  1671.     BX,CX,DX destroyed
  1672. Notes:    the keystrokes are the exact values to return from subsequent calls to
  1673.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  1674.         0000h causes subfunctions 01h and 11h to indicate an empty
  1675.               keyboard buffer
  1676.         FFFFh is followed by a word indicating the number of clock
  1677.               ticks to delay before the next faked keystroke
  1678.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  1679.       invocation, and does not range-check CX; it will overwrite memory
  1680.       following the resident portion if CX is greater than 100h.
  1681.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  1682.       which emulate the 4DOS and NDOS keystack
  1683. SeeAlso: AX=D44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  1684. --------G-2FD600-----------------------------
  1685. INT 2F - HEART.COM - INSTALLATION CHECK
  1686.     AX = D600h
  1687. Return: AX = 0303h (two hearts) if installed
  1688.         ES:DI -> buffer (see #2280)
  1689. Program: HEART.COM is a CPU lock-up/critical indicator utility by Mitch Davis.
  1690. Notes:    Once the host program has identified the address of the data area, it
  1691.       can change this to indicate safe/critical, alternate colours, etc.
  1692.     The entries for the color table are in char/attrib form.  Every two
  1693.       entries form a pair which is alternated between 68 times a minute.
  1694.       The first half of the table is for color videos, the second mono.
  1695.       Within each half, the first half is for the safe chars, and the
  1696.       second for the critical chars.
  1697.  
  1698. Format of HEART.COM buffer:
  1699. Offset    Size    Description    (Table 2280)
  1700.  00h  8 WORDs    table of colors/attributes (see notes above)
  1701.  10h    BYTE    flags
  1702.         bit 0: program is in critical section, so flash double
  1703.               exclamation mark
  1704.         bit 1: program is in safe code, so flash the heart character
  1705.  11h    WORD    position of heartbeat on screen, normally 009Eh (last column
  1706.         of second line)
  1707. --------T-2FD600-----------------------------
  1708. INT 2F U - VEDIT VSWAP - INSTALLATION CHECK
  1709.     AX = D600h
  1710. Return: AL = D6h if installed
  1711. Program: VSWAP is the resident portion of VEDIT's "swapper" capability; VEDIT
  1712.       is a programmer's text editor by Greenview Data.
  1713. SeeAlso: AX=D601h,AX=D602h
  1714. --------T-2FD601-----------------------------
  1715. INT 2F U - VEDIT VSWAP - ???
  1716.     AX = D601h
  1717.     BL = subfunction number???
  1718. Return: BL = return code ???
  1719.     ES = resident portion's data??? segment
  1720.     DX = resident portion's code segment
  1721. SeeAlso: AX=D600h"VSWAP"
  1722. --------T-2FD602-----------------------------
  1723. INT 2F U - VEDIT VSWAP - EXEC PROGRAM WITH SWAP
  1724.     AX = D602h
  1725.     other registers set as for INT 21/AX=4B00h
  1726. Return: CF set on error
  1727.         AL = error code
  1728.         82h = failure due to ???
  1729.     CF clear on success
  1730. SeeAlso: AX=D600h"VSWAP",INT 21/AH=4Bh"EXEC"
  1731. --------N-2FD701BX0000-----------------------
  1732. INT 2F - Banyan VINES v4+ - GET BANV INTERRUPT NUMBER
  1733.     AX = D701h
  1734.     BX = 0000h
  1735. Return: AX = 0000h if installed
  1736.         BX = interrupt number (60h to 66h)
  1737.        nonzero not present
  1738. Note:    if AX is nonzero, VINES 3.x or earlier may be installed, thus it is
  1739.       necessary to examine the four bytes preceding the handlers for
  1740.       INT 60 through INT 66 for the string "BANV"
  1741. SeeAlso: AX=D702h,AX=D703h,AX=D704h
  1742. --------N-2FD702-----------------------------
  1743. INT 2F U - Banyan VINES v4+ - PCPRINT interface
  1744.     AX = D702h
  1745.     BX = function
  1746.     ???
  1747. Return: ???
  1748. SeeAlso: AX=D701h,AX=D703h,INT 61/AX=0005h"Banyan"
  1749. --------N-2FD703-----------------------------
  1750. INT 2F U - Banyan VINES v4+ - MAIL interface
  1751.     AX = D703h
  1752.     BX = function
  1753.     ???
  1754. Return: ???
  1755. SeeAlso: AX=D702h,AX=D704h
  1756. --------N-2FD704-----------------------------
  1757. INT 2F U - Banyan VINES v4+ - Streettalk Directory Assistance interface
  1758.     AX = D704h
  1759.     BX = function
  1760.     ???
  1761. Return: ???
  1762. SeeAlso: AX=D703h,INT 61/AX=0007h/BX=0002h"Banyan",INT 61/AX=0007h/BX=0008h
  1763. --------N-2FD800-----------------------------
  1764. INT 2F U - Novell NetWare Lite - CLIENT.EXE - INSTALLATION CHECK
  1765.     AX = D800h
  1766. Return: AL = FFh if installed
  1767.         DX = version number (0100h for v1.0, 0101h for v1.1)
  1768.         BX = data segment of resident copy
  1769.         ES:DI -> private API entry point (see #2281)
  1770.         SI = segment of resident code
  1771. SeeAlso: AX=7A00h,AX=D880h
  1772.  
  1773. (Table 2281)
  1774. Call CLIENT API entry point with:
  1775.     BX = function
  1776.         0000h get ???
  1777.         Return: DX = CLIENT version??? (0101h for v1.1)
  1778.             ES:BX -> ??? data
  1779.         0001h ???
  1780.         0002h ???
  1781.         0003h ???
  1782.         0004h ???
  1783.         0005h ???
  1784.         DL = ???
  1785.         ???
  1786.         Return: ???
  1787.         0006h get module name???
  1788.         ES:DI -> 16-byte buffer
  1789.         Return: CX = ???
  1790.             ES:DI filled with "NWLITE_CLIENT" 00h 00h 00h
  1791.         0007h ???
  1792.         DX:CX = ???
  1793.         ???
  1794.         Return: ???
  1795.         0008h ???
  1796.         0009h ???
  1797.         DL = ???
  1798.         ES:DI -> 16-byte buffer for ???
  1799.         Return: CF clear if successful
  1800.                 AX = 0000h
  1801.                 CX = 0000h
  1802.                 SI,DI destroyed
  1803.             CF set on error
  1804.                 AX = error code 4903h
  1805.         000Ah ???
  1806.         AH = subfunction
  1807.             00h get ???
  1808.             01h clear/set ??? flag
  1809.             AL = new state (00h cleared, 01h set)
  1810.             02h set ???
  1811.             DX = new value of ???
  1812.         Return: DX = old value of ???
  1813.         000Bh ???
  1814.         AX = ???
  1815.         ???
  1816.         Return: ???
  1817.         000Ch ???
  1818.         AX = ???
  1819.         ???
  1820.         Return: ???
  1821.         000Dh ???
  1822.         AX = ???
  1823.         ???
  1824.         Return: ???
  1825.         000Eh get original INT 17
  1826.         Return: CF clear
  1827.             ES:BX -> original INT 17
  1828.         000Fh ???
  1829.         0010h ???
  1830.         AX = ???
  1831.         ???
  1832.         Return: ???
  1833.         0011h get ???
  1834.         Return: CF clear
  1835.             DL = ???
  1836.         0012h get ???
  1837.         AL = index of ???
  1838.         ES:DI -> 10-byte buffer for ???
  1839.         Return: CF clear if successful
  1840.                 ES:DI buffer filled
  1841.                 AX,CX destroyed
  1842.             CF set on error
  1843.                 AX = error code (4907h if AL out of range)
  1844.         0013h get ???
  1845.         Return: CF clear
  1846.             DH = ???
  1847.             DL = ???
  1848.         0014h ???
  1849.         DL = ???
  1850.         ???
  1851.         Return: CF clear if successful
  1852.                 ???
  1853.             CF set on error
  1854.                 AX = error code 8056h
  1855.         0015h ???
  1856.         DX = ???
  1857.         Return: ES:DI -> ???
  1858.         other
  1859.         Return: CF set
  1860.             AX = 0001h (invalid function)
  1861. --------N-2FD856-----------------------------
  1862. INT 2F U - Novell NetWare Lite v1.1 - SERVER - GET ???
  1863.     AX = D856h
  1864. Return: AX = 0001h if supported???
  1865.     BX = ??? (0004h for v1.1)
  1866.     CX = ??? (0F20h for v1.1)
  1867.     DS = segment of resident code
  1868.     ES = data segment of resident copy
  1869. Note:    this function is also supported by Personal NetWare SERVER, bundled
  1870.       with Novell DOS 7
  1871. --------N-2FD880-----------------------------
  1872. INT 2F U - Novell NetWare Lite v1.0+ - SERVER - INSTALLATION CHECK
  1873.     AX = D880h
  1874. Return: AL = FFh if installed
  1875.         DX = version number (0100h for v1.0, 0101h for v1.1)
  1876.         BX = data segment of resident copy
  1877.         CL = current state (00h SERVER is disabled, 01h SERVER is active)
  1878.         ES:DI -> private API entry point (see #2282)
  1879.         SI = ??? (offset of configuration info?)
  1880. Note:    this function is also supported by Personal NetWare SERVER, but DI is
  1881.       not set; instead, ES:SI points at the API entry point
  1882. SeeAlso: AX=7A00h,AX=D800h,INT 2A/AX=D852h
  1883.  
  1884. (Table 2282)
  1885. Call SERVER API entry point with:
  1886.     BX = function
  1887.         0000h ???
  1888.         ???
  1889.         Return: ???
  1890.         Note: closes open files by calling INT 21/AH=3Eh
  1891.         0001h get connection information
  1892.         DX = connection number (0001h-max connections)
  1893.         ES:DI -> 28-byte buffer for connection information
  1894.         Return: CF clear if successful
  1895.                 ES:DI buffer filled
  1896.             CF set on error
  1897.                 AX = FFFFh
  1898.     ---Personal NetWare only---
  1899.         0002h ???
  1900.         0003h ???
  1901.         0004h ???
  1902.         0005h ???
  1903.         0006h ???
  1904.         0007h ???
  1905.         other
  1906.         Return: CF set
  1907.             AX = 0001h (invalid function)
  1908. --------d-2FD8C0-----------------------------
  1909. INT 2F U - Novell NLCACHE,NWCACHE - INSTALLATION CHECK
  1910.     AX = D8C0h
  1911. Return: AL = FFh if installed
  1912.         CL = cache variant (01h NLCACHEC, 02h NLCACHEX, 03h NLCACHEM)
  1913.         DH = major version??? (01h for v1.1)
  1914.         DL = minor version??? (01h for v1.1)
  1915.         ES:DI -> private API entry point (see #2283)
  1916. Program: NLCACHE is a disk cache included with NetWare Lite
  1917. SeeAlso: AX=D800h,AX=D880h
  1918.  
  1919. (Table 2283)
  1920. Call NLCACHE/NWCACHE API entry point with:
  1921.     BX = function
  1922.         0000h ???
  1923.         ???
  1924.         Return: CF clear if successful
  1925.                 AX = 0000h
  1926.                 ???
  1927.             CF set on error
  1928.                 AX = error code
  1929.         0001h (NWCACHE only) ???
  1930.         ES:DI -> buffer for ???
  1931.         Return: ???
  1932.         other
  1933.         Return: CF set
  1934.             AX = 0001h (invalid function)
  1935. --------F-2FDA00-----------------------------
  1936. INT 2F - ZyXEL ZFAX v1.x - INSTALLATION CHECK
  1937.     AX = DA00h
  1938. Return: AH = enabled state (00h = enabled, 01h = disabled)
  1939.     AL = 5Ah installed
  1940. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  1941.       fax modems.
  1942. Note:    This function, and the other DAxxh functions, may apply only to version
  1943.       1 of the software; see AX=DB00h for the version 2 installation check
  1944. SeeAlso: AX=CBDCh,AX=DA01h,AX=DA02h,AX=DA03h,AX=DB00h
  1945. --------F-2FDA01-----------------------------
  1946. INT 2F - ZyXEL ZFAX v1.x - UNINSTALL
  1947.     AX = DA01h
  1948. Return: AL = 00h Success
  1949.          01h Failure
  1950. SeeAlso: AX=DA00h,AX=DB01h
  1951. --------F-2FDA02-----------------------------
  1952. INT 2F - ZyXEL ZFAX v.1x - DISABLE
  1953.     AX = DA02h
  1954. Return: AL = 00h
  1955. SeeAlso: AX=DA03h,AX=DB02h
  1956. --------F-2FDA03-----------------------------
  1957. INT 2F - ZyXEL ZFAX v1.x - ENABLE
  1958.     AX = DA03h
  1959. Return: AL = 00h
  1960. SeeAlso: AX=DA02h,AX=DB03h
  1961. --------G-2FDA55-----------------------------
  1962. INT 2F U - TRAP.COM - INSTALLATION CHECK
  1963.     AX = DA55h
  1964.     DL = interrupt number
  1965.     DH = ???
  1966. Return: if installed
  1967.         AH = interrupt number
  1968.         AL = ???
  1969.         ES:BX -> ???
  1970. Program: TRAP is an interrupt call tracer by Patrick Phillipot/Udo Chrosziel
  1971. Note:    a separate copy of TRAP is loaded for each interrupt to be traced; thus
  1972.       the interrupt number is part of the installation check
  1973. --------N-2FDAB2-----------------------------
  1974. INT 2F U - Beame&Whiteside BWSNMP - INSTALLATION CHECK
  1975.     AX = DAB2h
  1976. Return: AX = 00FFh if installed
  1977.         BX:CX -> MIB table
  1978. Program: BWSNMP is part of the BW-NFS package
  1979. SeeAlso: INT 62/AH=00h"ETHDEV"
  1980. --------F-2FDB00-----------------------------
  1981. INT 2F - ZyXEL ZFAX v2+ - INSTALLATION CHECK
  1982.     AX = DB00h
  1983. Return:    AL = 5Bh if installed (v2.x)
  1984.         ES:BX -> configuration table???
  1985.     AX = 00DBh if installed (v3)
  1986.         ES:BX -> ZFAX configuration table (see #2284)
  1987. Program: ZFAX is the bundled FAX software which comes with the ZyXEL model
  1988.       Fax modems.
  1989. SeeAlso: AX=CBDCh,AX=DA00h,AX=DB01h,AX=DB02h,AX=DB03h
  1990.  
  1991. Format of ZFAX Configuration Table:
  1992. Offset    Size    Description    (Table 2284)
  1993.  00h    WORD    table version number (0300h for v3.0-v4.01)
  1994.  02h    BYTE    reserved
  1995.  03h 70 BYTEs    ZFAX working path
  1996.  49h 128 BYTEs    path to external editor
  1997.  C9h 128 BYTEs    path to external terminal emulator
  1998. 149h 128 BYTEs    path to Ring Shell
  1999. 1C9h 128 BYTEs    path to DOS Shell
  2000. 249h 128 BYTEs    path to Data Shell
  2001. 2C9h 70 BYTEs    path to Chinese font
  2002. 30Fh    BYTE    printer type (see #2285)
  2003. 310h    BYTE    printer port (00h = LPT1, etc.)
  2004. 311h    BYTE    type of graphics adapter
  2005.         (00h auto-detect, 01h VGA, 02h EGA, 03h CGA, 04h Hercules)
  2006. 312h    BYTE    display type
  2007.         (00h auto-detect, 01h LCD, 02h color, 03h mono)
  2008. 313h    BYTE    scan code for ZFAX hotkey (see #0005)
  2009. 314h    BYTE    shift mask for ZFAX hotkey
  2010. 315h    BYTE    tone/pulse dialing (00h tone, 01h pulse)
  2011. 316h    BYTE    Caller ID (00h disabled, 01h enabled)
  2012. 317h    BYTE    Distinctive Ring (00h disabled, 01h enabled)
  2013. 318h    BYTE    normal ring answer type (see #2286)
  2014. 319h    BYTE    Ring 1 answer type (see #2286)
  2015. 31Ah    BYTE    Ring 2 answer type (see #2286)
  2016. 31Bh    BYTE    Ring 3 answer type (see #2286)
  2017. 31Ch    BYTE    COM port for modem
  2018. 31Dh    BYTE    speaker volume (00h-07h)
  2019. 31Eh    BYTE    modem dial timer, seconds
  2020. 31Fh    WORD    user-defined COM port I/O address
  2021. 321h    BYTE    user-defined COM port IRQ number
  2022. 322h 81 BYTEs    dial prefix string
  2023. 373h 79 BYTEs    dial postfix string
  2024. 3C2h    BYTE    ring count until automatic answer
  2025. 3C3h    BYTE    retry count on busy signal
  2026. 3C4h    BYTE    redial delay in seconds
  2027. 3C5h    WORD    system password
  2028. 3C7h    BYTE    reserved
  2029. 3C8h    BYTE    voice file compression format
  2030.         00h CELP at 9600bps
  2031.         01h two-bit ADPCM at 19200bps
  2032.         02h three-bit ADPCM at 28800bps
  2033. 3C9h    BYTE    voice system: DTMF 0 action (see #2287)
  2034. 3CAh    BYTE    voice system: DTMF 1 action
  2035. 3CBh    BYTE    voice system: DTMF 2 action
  2036. 3CCh    BYTE    voice system: DTMF 3 action
  2037. 3CDh    BYTE    voice system: DTMF 4 action
  2038. 3CEh    BYTE    voice system: DTMF 5 action
  2039. 3CFh    BYTE    voice system: DTMF 6 action
  2040. 3D0h    BYTE    voice system: DTMF 7 action
  2041. 3D1h    BYTE    voice system: DTMF 8 action
  2042. 3D2h    BYTE    voice system: DTMF 9 action (see #2287)
  2043. 3D3h    WORD    reserved
  2044. 3D5h 25 BYTEs    local FAX ID to display on page header
  2045. 3EEh 20 BYTEs    local FAX ID sent to remote FAX
  2046. 402h    BYTE    FAX page size
  2047.         00h A4 (210x297mm)
  2048.         01h B4 (250x353mm)
  2049.         02h A3 (297x420mm)
  2050. 403h    BYTE    FAX resolution
  2051.         00h normal (3.85 pixels/mm)
  2052.         01h high (7.7 pixels/mm)
  2053. 404h    BYTE    FAX coding scheme
  2054.         00h 1-D, modified Huffman coding
  2055.         01h 2-D, modified READ coding
  2056. 405h    BYTE    left margin for text in millimeters
  2057. 406h    BYTE    vertical insertion for text in mm (0-20)
  2058. 407h    BYTE    horizontal insertion in mm (0-20)
  2059. 408h    BYTE    maximum text lines per page
  2060. 409h    BYTE    text type (00h ASCII, 01h WordStar-formatted)
  2061. 40Ah    BYTE    PCX image resize (00h disabled, 01h enabled)
  2062. 40Bh    BYTE    AutoPrint (00h disabled, 01h enabled)
  2063. 40Ch    BYTE    cover page (00h disabled, 01h enabled)
  2064. 40Dh 81 BYTEs    cover page logo filename
  2065. 45Eh 65 BYTEs    cover page sender name
  2066. 49Fh    BYTE    print capture (00h disabled, 01h enabled)
  2067. 4A0h    BYTE    send immediately (00h disabled, 01h enabled)
  2068. 4A1h    BYTE    print capture printer port
  2069. 4A2h    BYTE    print capture timer in seconds
  2070. 4A3h    BYTE    scan code for print capture hotkey (see #0005)
  2071. 4A4h    BYTE    shift mask for print capture hotkey
  2072. 4A5h    BYTE    DataShell type
  2073.         00h internal Zmodem, 01h Data Shell, 02h disable
  2074. 4A6h    BYTE    video I/O type
  2075.         00h auto-detect, 01h use BIOS, 02h direct writes
  2076. 4A7h    BYTE    call transfer digits (0-9)
  2077. 4A8h    WORD    voice recorder maximum time in seconds (0-999)
  2078.  
  2079. (Table 2285)
  2080. Values for ZFAX printer type:
  2081.  00h    EPSON FX (9 pins)
  2082.  01h    EPSON LQ (24 pins)
  2083.  02h    HP Laser Jet II, letter size
  2084.  03h    HP Laser Jet II, legal size
  2085.  04h    HP Laser Jet II, A4 size
  2086.  05h    HP Laser Jet III, letter size
  2087.  06h    HP Laser Jet III, legal size
  2088.  07h    HP Laser Jet III, A4 size
  2089. SeeAlso: #2284
  2090.  
  2091. (Table 2286)
  2092. Values for Ring Answer Type:
  2093.  00h    voice system
  2094.  01h    FAX only
  2095.  02h    Data Shell
  2096.  03h    Ring Shell
  2097.  04h    DOS Shell
  2098.  05h    ignore
  2099. SeeAlso: #2284
  2100.  
  2101. (Table 2287)
  2102. Values for DTMF action:
  2103.  00h    none
  2104.  01h    page operator
  2105.  02h    FaxBack
  2106.  03h    announcement
  2107.  04h    call transfer
  2108.  05h    receive FAX
  2109.  06h    receive data
  2110.  07h    voice mailbox
  2111.  08h    DOS Shell Out
  2112.  09h    Data Shell Out
  2113. SeeAlso: #2284
  2114. --------U-2FDB00-----------------------------
  2115. INT 2F U - WINGO.COM - INSTALLATION CHECK
  2116.     AX = DB00h
  2117. Return: AX = FFFFh if installed
  2118.     CX = 5749h ('WI') if installed
  2119.     DX = 4E47h ('NG') if installed
  2120.         ES = segment of resident code
  2121. Program: WINGO.COM is TSR for starting Windows programs from DOS
  2122.       prompt (together with companion Windows program
  2123.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  2124.       PC Magazine
  2125. Range:    AH=DBh to AH=FFh, selected by scanning for a free multiplex number
  2126. SeeAlso: AX=DB01h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2127. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2128. --------F-2FDB01-----------------------------
  2129. INT 2F - ZyXEL ZFAX v2+ - UNINSTALL
  2130.     AX = DB01h
  2131. Return: AX = status
  2132.         0000h successful
  2133.         0001h ZFAX is busy
  2134.         0002h another program resident above ZFAX
  2135. Note:    this function unhooks the vectors taken by the ZFAX TSR if they have
  2136.       not been hooked by other TSRs and releases the TSR's memory
  2137.     ZFAX v2.x crashes the contributor's machine when this function is
  2138.       called
  2139. SeeAlso: AX=DA01h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  2140. --------U-2FDB01-----------------------------
  2141. INT 2F U - WINGO.COM - SET CALLBACK FUNCTION POINTER
  2142.     AX = DB01h
  2143.     CX:DX -> new callback function
  2144. Return: AX = 0000h
  2145.     CX:DX -> end of resident code (stack ???)
  2146. Desc:    the callback function is used for WINGO <-> WINSTART communication
  2147. SeeAlso: AX=DB00h"WINGO",AX=DB02h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2148. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2149. --------F-2FDB02-----------------------------
  2150. INT 2F - ZyXEL ZFAX v2.x - DISABLE
  2151.     AX = DB02h
  2152. Return: AL = 00h
  2153. SeeAlso: AX=DA02h,AX=DB00h"ZFAX",AX=DB01h"ZFAX",AX=DB03h"ZFAX"
  2154. --------U-2FDB02-----------------------------
  2155. INT 2F U - WINGO.COM - RESET CALLBACK FUNCTION POINTER
  2156.     AX = DB02h
  2157. Return: AX = 0000h
  2158. Desc:    the callback function is used for WINGO <-> WINSTART communication
  2159. SeeAlso: AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2160. SeeAlso: AX=DB05h"WINGO",AX=DB06h"WINGO"
  2161. --------F-2FDB03-----------------------------
  2162. INT 2F - ZyXEL ZFAX v2.x - ENABLE
  2163.     AX = DB03h
  2164. Return: AL = 00h
  2165. SeeAlso: AX=DA03h,AX=DB00h"ZFAX",AX=DB02h"ZFAX"
  2166. --------U-2FDB03-----------------------------
  2167. INT 2F U - WINGO.COM - SET ??? FLAG
  2168.     AX = DB03h
  2169. Return: AX = 0000h
  2170. SeeAlso: AX=DB00h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  2171. --------U-2FDB04-----------------------------
  2172. INT 2F U - WINGO.COM - RESET ??? FLAG
  2173.     AX = DB04h
  2174. Return: AX = 0000h
  2175. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB05h"WINGO",AX=DB06h"WINGO"
  2176. --------U-2FDB05-----------------------------
  2177. INT 2F U - WINGO.COM - GET ??? FLAG
  2178.     AX = DB05h
  2179. Return: AX = 0000h
  2180.     DX = unknown flag - 0 or 1
  2181. Program: WINGO.COM is TSR for starting Windows programs from DOS
  2182.       prompt (together with companion Windows program
  2183.       WINSTART.EXE) written by Douglas Boling, contributing editor of
  2184.       PC Magazine
  2185. SeeAlso: AX=DB00h"WINGO",AX=DB03h"WINGO",AX=DB04h"WINGO"
  2186. --------U-2FDB06-----------------------------
  2187. INT 2F U - WINGO.COM - CALL CALLBACK FUNCTION
  2188.     AX = DB06h
  2189. Return: AX = return value of INT 2F/AX=1685h
  2190. Note:    uses Windows service INT 2F/AX=1685h (SWITCH VMs AND CALLBACK) to
  2191.       call the callback function previously set by AX=DB01h
  2192.     used for WINGO <-> WINSTART communication
  2193. SeeAlso: AX=1685h, AX=DB00h"WINGO",AX=DB01h"WINGO",AX=DB02h"WINGO",
  2194. SeeAlso: AX=DB03h"WINGO",AX=DB04h"WINGO",AX=DB05h"WINGO"
  2195. --------F-2FDB10-----------------------------
  2196. INT 2F - ZyXEL ZFAX v3+ - EXECUTE ZFAX MAIN MENU
  2197.     AX = DB10h
  2198. SeeAlso: AX=DB00h"ZFAX",AX=DB11h"ZFAX"
  2199. --------F-2FDB11-----------------------------
  2200. INT 2F - ZyXEL ZFAX v3+ - SEND FAX
  2201.     AX = DB11h
  2202.     DS:SI -> filename including path (max 128 characters)
  2203.     DS:BX -> remote FAX number
  2204. Return:    AX = status (see #2288)
  2205. SeeAlso: AX=DB00h"ZFAX",AX=DB12h,AX=DB13h,AX=DB14h,AX=DB15h,AX=DB20h,AX=DB21h
  2206.  
  2207. (Table 2288)
  2208. Values for ZFAX status:
  2209.  00h    OK
  2210.  01h    invalid DOS function
  2211.  02h    file not found
  2212.  03h    path not found
  2213.  04h    no file handle available
  2214.  05h    access denied by DOS
  2215.  06h    invalid handle
  2216.  07h    disk full
  2217.  10h    printer error
  2218.  11h    no graphics font
  2219.  12h    no ZFAX font
  2220.  20h    DCD dropped while sending
  2221.  21h    not ZyXEL modem
  2222.  22h    busy
  2223.  23h    no response from COM port
  2224.  24h    no carrier
  2225.  25h    no dial tone
  2226.  26h    no answer
  2227.  27h    no response
  2228.  28h    failed to send FAX
  2229.  30h    user aborted
  2230.  40h    critical error on disk
  2231.  50h    parameter error
  2232. --------F-2FDB12-----------------------------
  2233. INT 2F - ZyXEL ZFAX v3+ - PRINT FAX
  2234.     AX = DB12h
  2235.     DS:SI -> filename, including path (max 128 characters)
  2236. Return: AX = status (see #2288)
  2237. SeeAlso: AX=DB11h,AX=DB13h,AX=DB14h
  2238. --------F-2FDB13-----------------------------
  2239. INT 2F - ZyXEL ZFAX v3+ - CONVERT FAX
  2240.     AX = DB13h
  2241.     DS:SI -> source filename, including path (max 128 characters)
  2242.     DS:BX -> destination filename, including path (max 80 characters)
  2243.     CX = destination file format
  2244.         00h FAX, 01h PCX, 02h TIFF, 03h PRN
  2245. Return: AX = status (see #2288)
  2246. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h,AX=DB22h
  2247. --------F-2FDB14-----------------------------
  2248. INT 2F - ZyXEL ZFAX v3+ - VIEW FAX
  2249.     AX = DB14h
  2250.     DS:SI -> source filename, including path (max 128 characters)
  2251. Return: AX = status (see #2288)
  2252. SeeAlso: AX=DB11h,AX=DB12h,AX=DB14h
  2253. --------F-2FDB15-----------------------------
  2254. INT 2F - ZyXEL ZFAX v4.01 - SEND FAX WITH LOGO AND SIGNATURE
  2255.     AX = DB15h
  2256.     DS:SI -> source filename, including path (max 128 characters)
  2257.     DS:BX -> remote FAX number
  2258.     DS:CX -> Logo filename
  2259.     DS:DX -> Signature filename
  2260. Return: AX = status (see #2288)
  2261. SeeAlso: AX=DB00h"ZFAX",AX=DB11h
  2262. --------F-2FDB16-----------------------------
  2263. INT 2F - ZyXEL ZFAX v4.01 - QUOTE PREVIOUS STATUS
  2264.     AX = DB16h
  2265. Return: DX:AX -> previous receive state transaction log (see #2289)
  2266.     BX = type (00h incoming FAX, 01h incoming data, 02h incoming voice)
  2267. SeeAlso: AX=DB00h"ZFAX",AX=DB11h,AX=DB17h
  2268.  
  2269. Format of ZFAX transaction log receive state:
  2270. Offset    Size    Description    (Table 2289)
  2271.  00h    WORD    year
  2272.  02h    WORD    date
  2273.  04h    WORD    time
  2274.  06h    WORD    extension number
  2275.  08h    WORD    type: 00h incoming FAX, 01h outgoing FAX, 02h voice message
  2276.  0Ah    WORD    status: 00h normal, 01h remote delete
  2277.  0Ch 125 BYTEs    filename
  2278.  89h 24 BYTEs    caller ID
  2279.  A1h 20 BYTEs    FAX number
  2280.  B5h 20 BYTEs    remote FAX ID
  2281.  C9h    WORD    error code
  2282.  CBh    WORD    connection direction (00h transmit, 01h receive)
  2283.  CDh    BYTE    connection time minutes
  2284.  CEh    BYTE    connection time seconds
  2285.  CFh    BYTE    ???
  2286.  D0h    WORD    connection speed (24, 48, 72, 96, 12, 144)
  2287.  D2h    WORD    connection page size (A4, B4, A3)
  2288.  D4h    WORD    connection coding scheme (1-DN, 1-DH, 2-DN, 2-DH)
  2289.  D6h    WORD    page count
  2290. --------F-2FDB17-----------------------------
  2291. INT 2F - ZyXEL ZFAX v4.01 - BEGIN RECEIVING INCOMING CALL
  2292.     AX = DB17h
  2293. Return: AX = status (0000h successful, 0001h unable to start at this time)
  2294. SeeAlso: AX=DB00h"ZFAX"
  2295. --------F-2FDB18-----------------------------
  2296. INT 2F - ZyXEL ZFAX v4.01 - SCHEDULE CALL
  2297.     AX = DB18h
  2298.     DS:SI -> schedule data (see #2289)
  2299. Return: AX = status (see #2288)
  2300. SeeAlso: AX=DB00h"ZFAX"
  2301. --------F-2FDB20-----------------------------
  2302. INT 2F - ZyXEL ZFAX v3+ - POLL FAX
  2303.     AX = DB20h
  2304.     DS:SI -> remote FAX number
  2305. Return: AX = status (see #2288)
  2306. SeeAlso: AX=DB11h,AX=DB21h
  2307. --------F-2FDB21-----------------------------
  2308. INT 2F - ZyXEL ZFAX v3+ - SEND VOICE
  2309.     AX = DB21h
  2310.     DS:SI -> filename including path (max 128 characters)
  2311.     DS:BX -> remote phone number
  2312. Return:    AX = status (see #2288)
  2313. SeeAlso: AX=DB11h,AX=DB20h,AX=DB22h,AX=DB23h,AX=DB24h
  2314. --------F-2FDB22-----------------------------
  2315. INT 2F - ZyXEL ZFAX v3+ - CONVERT VOICE FILE
  2316.     AX = DB22h
  2317.     DS:SI -> source filename, including path (max 128 characters)
  2318.     DS:BX -> destination filename, including path (max 80 characters)
  2319.     CX = destination format
  2320.         00h two-bit ADPCM, 01h three-bit ADPCM, 02h VOC
  2321. Return:    AX = status (see #2288)
  2322. SeeAlso: AX=DB13h,AX=DB20h,AX=DB21h,AX=DB23h
  2323. --------F-2FDB23-----------------------------
  2324. INT 2F - ZyXEL ZFAX v3+ - RECORD VOICE FILE
  2325.     AX = DB23h
  2326.     DS:SI -> destination filename, including path (max 128 characters)
  2327.     CX = recording channel (0 = telephone line, 1 = microphone/speaker)
  2328.     DX = voice file format
  2329.         00h CELP, 01h two-bit ADPCM, 02h three-bit ADPCM
  2330. Return: AX = status (see #2288)
  2331. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  2332. --------F-2FDB24-----------------------------
  2333. INT 2F - ZyXEL ZFAX v3+ - PLAY VOICE FILE
  2334.     AX = DB24h
  2335.     DS:SI -> name of voice file, including path (max 128 characters)
  2336.     CX = playback channel (0 = telephone line, 1 = microphone/speaker)
  2337. Return: AX = status (see #2288)
  2338. SeeAlso: AX=DB21h,AX=DB22h,AX=DB24h
  2339. --------F-2FDB25-----------------------------
  2340. INT 2F - ZyXEL ZFAX v3+ - ANSWER MODEM WITH VOICE SYSTEM
  2341.     AX = DB25h
  2342. Return: AX = status (see #2288)
  2343. SeeAlso: AX=DB21h,AX=DB22h,AX=DB26h,AX=DB27h,AX=DB28h
  2344. --------F-2FDB26-----------------------------
  2345. INT 2F - ZyXEL ZFAX v3+ - DIAL PHONE
  2346.     AX = DB26h
  2347.     DS:SI -> remote phone number
  2348. Return: AX = status (see #2288)
  2349. SeeAlso: AX=DB25h
  2350. --------F-2FDB27-----------------------------
  2351. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX - ANSWER MODEM AND SET TO FAX MODE
  2352.     AX = DB27h
  2353. Return: AX = status (see #2288)
  2354. SeeAlso: AX=DB25h,AX=DB28h
  2355. --------F-2FDB28-----------------------------
  2356. INT 2F - ZyXEL ZFAX v3+ - RECEIVE FAX DATA - ANSWER MODEM IN MULTI-AUDIO MODE
  2357.     AX = DB28h
  2358. Return: AX = status (see #2288)
  2359. SeeAlso: AX=DB25h,AX=DB27h,AX=DB41h
  2360. --------F-2FDB40-----------------------------
  2361. INT 2F - ZyXEL ZFAX v3+ - INTERNAL TERMINAL
  2362.     AX = DB40h
  2363. Return: AX = status (see #2288)
  2364. SeeAlso: AX=DB00h
  2365. --------F-2FDB41-----------------------------
  2366. INT 2F - ZyXEL ZFAX v3+ - SEND DATA - DIAL NUMBER AND UPLOAD FILE WITH ZMODEM
  2367.     AX = DB41h
  2368.     DS:SI -> source file name, including path (max 128 characters)
  2369.     DS:BX -> remote data number
  2370. Return: AX = status (see #2288)
  2371. SeeAlso: AX=DB00h,AX=DB28h
  2372. --------K-2FDC00-----------------------------
  2373. INT 2F - GOLD.COM - INSTALLATION CHECK
  2374.     AX = DC00h
  2375. Return: AL = state
  2376.         00h not installed
  2377.         FFh installed
  2378. Program: GOLD is a TSR by Bob Eager which makes the NumLock key return the code
  2379.       for F1; the purpose is to improve Kermit's VTxxx emulation
  2380. --------K-2FDC01-----------------------------
  2381. INT 2F - GOLD.COM - GET STATE
  2382.     AX = DC01h
  2383. Return: AL = status
  2384.         00h off
  2385.         01h on
  2386. SeeAlso: AX=DC00h,AX=DC02h
  2387. --------K-2FDC02-----------------------------
  2388. INT 2F - GOLD.COM - SET STATE
  2389.     AX = DC02h
  2390.     DL = new state
  2391.         00h off
  2392.         01h on
  2393. Return: AL = 00h (OK)
  2394. SeeAlso: AX=DC01h
  2395. --------t-2FDD-------------------------------
  2396. INT 2F - CappaCom programs - API
  2397.     AH = DDh
  2398.     AL = 00h general installation check
  2399.         Return: AL = FFh if any CappaCom programs are resident
  2400.     AL = FEh get info
  2401.         Return: ES:BX -> TSR info list (see #2290)
  2402.     AL = program identifier
  2403.         BH = function
  2404.         FDh get version
  2405.             Return: BX = version
  2406.         FFh installation check
  2407.             Return: AL = FFh if installed
  2408.                 BX = version
  2409.                 ES = segment of resident code
  2410.         others vary by program
  2411. Return: AL = status
  2412.         bit 7 set on error
  2413.         AL = 81h unknown function
  2414. Note:    CappaCom was originally SoftCom but changed its name due to a trademark
  2415.       conflict
  2416. Index:    installation check;SoftCom programs
  2417. Index:    installation check;CappaCom programs
  2418.  
  2419. Format of CappaCom TSR info list:
  2420. Offset    Size    Description    (Table 2290)
  2421.  00h  9 BYTEs    blank-padded ASCIZ program name
  2422.  09h    BYTE    program ID
  2423.  0Ah    WORD    program's PSP segment
  2424.  0Ch    WORD    program version (major in high byte)
  2425.  0Eh    DWORD    pointer to next item in info list or 0000h:0000h
  2426.  12h    BYTE    number of interrupts hooked
  2427.  13h  5 BYTEs    interrupt numbers hooked by program
  2428.  18h  8 BYTEs    reserved
  2429. ----------2FDD-------------------------------
  2430. INT 2F - MIXFIX.EXE - API
  2431.     AH = DDh
  2432.     AL = function
  2433.         00h installation check
  2434.         Return: AX = 00DDh if installed
  2435.                 BX = version (BH = major, BL = minor)
  2436.         41h/61h get From: address
  2437.         Return: AX = 0001h
  2438.             ES:BX -> ASCIZ 4d address of mail sender ("1:2/3.4")
  2439.         49h/69h get To: address
  2440.         Return: AX = 0001h
  2441.             ES:BX -> ASCIZ 4d address of recipient ("1:2/3.4")
  2442.         4Ah/6Ah get subject of mail
  2443.         Return: AX = 0001h
  2444.             ES:BX -> ASCIZ subject of handled mail
  2445.         4Dh/6Dh get mail name
  2446.         Return: AX = 0001h
  2447.             ES:BX -> ASCIZ full name of current mail file
  2448.         4Eh/6Eh get From: field
  2449.         Return: AX = 0001h
  2450.             ES:BX -> ASCIZ From: field of mail (mail sender's name)
  2451. Program: MIXFIX by "KIV without Co" is a FidoNet mail robot which may execute
  2452.       other programs for mail handling.  The called programs may use the
  2453.       services described here to retrieve information about the mail being
  2454.       handled.
  2455. Index: installation check;MIXFIX.EXE
  2456. --------d-2FDD--BX7844-----------------------
  2457. INT 2F - xDISK v3.32+ - INSTALLATION CHECK
  2458.     AH = DDh
  2459.     BX = 7844h ('xD')
  2460.     CX = 4953h ('IS')
  2461.     DX = 4B3Fh ('K?')
  2462.     AL = desired drive (01h-1Ah) or 00h to check for xDISK on any drive
  2463.     ES:DI -> 25-byte data buffer (see #2291)
  2464. Return: AX = DDFFh if installed (on specified drive if AL nonzero on entry)
  2465.        BX = 87BBh
  2466.        DX = B4C0h
  2467.        ES:DI buffer filled
  2468.     CX,CF destroyed
  2469. SeeAlso: INT 21/AX=4404h"xDISK",INT 21/AX=4405h"xDISK"
  2470.  
  2471. Format of xDISK data buffer:
  2472. Offset    Size    Description    (Table 2291)
  2473.  00h    DWORD    pointer to ASCIZ driver signature "xDISK unit: X"
  2474.  04h    BYTE    flag: 01h if disk linked to DOS, 00h if unlinked
  2475.  05h    BYTE    flag: 01h if write protected, 00h if not
  2476.  06h    BYTE    flag: 01h if root directory full, 00h if not
  2477.  07h    BYTE    flag: 01h if free space uncompacted, 00h if compacted
  2478.  08h    BYTE    resizing state: 00h not resizable, 01h resized, 80h resizable
  2479.  09h    BYTE    flag: 01h inelastic resizable disk, 00h elastic
  2480.  0Ah  2 BYTEs    reserved
  2481.  0Ch    BYTE    flag: 01h collapsed disk, 00h not collapsed
  2482.  0Dh    BYTE    flag: 01h using all EMS, 00h some EMS free
  2483.  0Eh    BYTE    flag: 01h password enabled, 00h disabled
  2484.  0Fh    BYTE    flag: 01h password audio feedback, 00h no feedback
  2485.  10h    BYTE    flag: 01h password video feedback, 00h no feedback
  2486.  11h    BYTE    flag: 01h confirm changes, 00h no confirmation
  2487.  12h    BYTE    flag: 01h terse display, 00h verbose display
  2488.  13h    BYTE    flag: 01h click speaker on disk access, 00h no click
  2489.  14h    BYTE    flag: 01h flash icon on disk access, 00h no icon flash
  2490.  15h    BYTE    FAT entry size: 00h 12-bit, FFh 16-bit
  2491.  16h    WORD    count of open files in RAM disk
  2492.  18h    BYTE    unused
  2493. --------N-2FDE00BL00-------------------------
  2494. INT 2F U - Novell Netware - RPRINTER, NPRINTER - INSTALLATION CHECK
  2495.     AX = DE00h
  2496.     BL = 00h
  2497. Return: AL = FFh If Rprinter/Nprinter Installed
  2498.     BX -> Program Segment Prefix N/Rprinter.exe
  2499. --------Q-2FDE00BX4456-----------------------
  2500. INT 2F - DESQview v2.26+ External Device Interface - INSTALLATION CHECK
  2501.     AX = DE00h
  2502.     BX = 4456h ("DV")
  2503.     CX = 5844h ("XD")
  2504.     DX = 4931h ("I1")
  2505. Return: AL = FFh if installed (even if other registers do not match)
  2506.     if BX,CX, and DX were as specified on entry,
  2507.         BX = 4845h ("HE")
  2508.         CX = 5245h ("RE")
  2509.         DX = 4456h ("DV")
  2510. Range:    AH=C0h to AH=FFh, selected by scanning AH=DEh-FFh, then AH=C0h-DDh
  2511. Note:    the XDI handler should not issue any DOS or BIOS calls, nor should it
  2512.       issue DESQview API calls other than those allowed from hardware ints
  2513. SeeAlso: AX=DE02h,INT 15/AX=5400h
  2514. --------Q-2FDE01-----------------------------
  2515. INT 2F - DESQview v2.26+ External Device Interface - DRIVER CUSTOM SUBFUNCTION
  2516.     AX = DE01h
  2517.     BX = driver ID
  2518.     other registers as needed by driver
  2519. Notes:    XDI drivers should pass this call through to previous handler if ID
  2520.       does not match
  2521.     DESQview never calls this function
  2522. --------Q-2FDE01BX4450-----------------------
  2523. INT 2F U - Quarterdeck QDPMI.SYS v1.0 - INSTALLATION CHECK
  2524.     AX = DE01h
  2525.     BX = 4450h ("DP")
  2526.     CX = 4D49h ("MI")
  2527.     DX = 3039h ("09")
  2528. Return: AL = FFh if installed
  2529.         BX = 4D42h ("MB")
  2530.         CX = 4921h ("I!")
  2531.         DX = 8F4Fh
  2532.         ES:DI -> filename of DPMI host overlay
  2533. Note:    the installation check consists of testing for the existence of the
  2534.       character device QDPMI$$$
  2535. SeeAlso: INT 2F/AX=1687h,INT 31/AX=0000h
  2536. Index:    installation check;QDPMI
  2537. --------U-2FDE01BX5242-----------------------
  2538. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, Ralf Brown's XDI drivers
  2539.     AX = DE01h
  2540.     BX = 5242h ("RB")
  2541.     CX:DX = program identifier
  2542.         656F7000h ("eop",0) for DVeop
  2543. Return: AX = 5242h ("RB") if installed
  2544.         ES:BX -> data or entry point (see #2292)
  2545.         CX = version number (CH = major, CL = minor)
  2546.  
  2547. (Table 2292)
  2548. Call DVeop entry point with:
  2549.     ES:DI -> callback address or 0000h:0000h to remove callback
  2550. Return: AX = status
  2551.         0000h failed (callback table full or attempted to remove non-
  2552.           existent callback)
  2553.         0001h successful
  2554.         ES:DI -> chaining address
  2555.     BX,CX,DX destroyed
  2556. Notes:    the callback function is called with a simulated interrupt when the
  2557.       DESQview window containing it is closed; it should perform all
  2558.       necessary cleanup and then perform a FAR jump to the chaining address
  2559.       or an IRET if the chaining address is 0000h:0000h
  2560.     if the program wishes to remove itself before the window is closed, it
  2561.       should call the DVeop entry point with the previously returned
  2562.       chaining address and ignore the returned chaining address.
  2563. --------U-2FDE01BX7474-----------------------
  2564. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVTXDI.COM
  2565.     AX = DE01h
  2566.     BX = 7474h
  2567.     CL = function
  2568.         00h installation check
  2569.         Return: AL = FFh
  2570.         01h get process handle
  2571.         DX = keys on Open Window menu (DL = first, DH = second)
  2572.         Return: AX = process handle or 0000h if not running
  2573.         02h (v1.3+) set TMAN handle
  2574.         DX = TMAN process handle
  2575.         03h (v1.3+) set open keys to ignore on next CL=01h call
  2576.         DX = keys on Open Window menu (DL = first, DH = second)
  2577. Return: BX = 4F4Bh ("OK")
  2578.     DL destroyed
  2579. Note:    DVTXDI is distributed as part of the shareware products DVTree (DOS
  2580.      shell/DESQview process manager) and DVTMAN by Mike Weaver
  2581. Index:    installation check;DVTXDI
  2582. --------U-2FDE01BX7575-----------------------
  2583. INT 2F - DESQview v2.26+ XDI - CUSTOM SUBFUNCTION, DVSIXDI.COM
  2584.     AX = DE01h
  2585.     BX = 7575h
  2586.     CX = function
  2587.         0000h installation check
  2588.         Return: AX = 00FFh if installed
  2589.         0001h turn on notification (currently unused)
  2590.         Return: AX = 0001h
  2591.         0002h turn off notification (currently unused)
  2592.         Return: AX = 0001h
  2593.         0003h get process information
  2594.         Return: AX = status
  2595.                 0000h failed
  2596.                 0001h successful
  2597.                 BX = last instantaneous time slice
  2598.                     in 1/100s (v1.10)
  2599.                     in 1/18s (v1.11+)
  2600.                 CX = number of processes
  2601.                 DX = number of "(starting)" records (v2.00+)
  2602.                 SI = number of records in process info array
  2603.                       (v2.00+) (always 15 for v1.x)
  2604.                 ES:DI -> process info array (see #2293,#2294)
  2605.         0004h get version
  2606.         Return: AH = major version
  2607.             AL = minor version
  2608.         0005h (v1.10+) get time since DESQview started
  2609.         Return: DX:AX = 1/100s since DV start (v1.10)
  2610.             DX:AX = 1/18s since DV start (v1.11+)
  2611.         0006h (v1.10+) get number of task switches
  2612.         Return: DX:AX = total task switches
  2613.             CX = task switches in last instantaneous interval
  2614. Notes:    DVSIXDI is part of the DVSI (DESQview System Information) package by
  2615.       Daniel J. Bodoh
  2616.     for v1.00, function 0003h allocates common memory, which the caller
  2617.       must deallocate after reading the process information; only the
  2618.       currently used records are placed in the buffer
  2619.     for v1.10+, function 0003h merely returns a pointer to the internal
  2620.       array of process information; the caller should make a copy of the
  2621.       array while inside a critical section (see INT 15/AX=101Bh).    Only
  2622.       those records with bit 7 of the first byte set are valid.
  2623. Index:    installation check;DVSIXDI
  2624.  
  2625. Format of DVSIXDI v1.00 information for one process:
  2626. Offset    Size    Description    (Table 2293)
  2627.  00h    BYTE    flags
  2628.         bit 7: process slot is valid
  2629.  01h    WORD    offset into DESQVIEW.DVO of program's record if started from
  2630.           Open Windows menu, else undefined
  2631.  03h    WORD    Switch Windows window number
  2632.  05h    WORD    segment of process handle
  2633.  07h    WORD    number of tasks owned by process
  2634.  09h    WORD    mapping context of process (see #0318 at INT 15/AX=1016h)
  2635.  0Bh    DWORD    hook for other programs
  2636.  
  2637. Format of DVSIXDI v1.10-v2.00 information for one process:
  2638. Offset    Size    Description    (Table 2294)
  2639.  00h    BYTE    process flags (see #2295)
  2640.  01h    WORD    Open Window keys
  2641.  03h    WORD    Switch Windows number
  2642.  05h    WORD    segment of process handle
  2643.  07h    WORD    number of tasks for process
  2644.  09h    WORD    process mapping context
  2645.  0Bh    DWORD    time process started (relative to start of DESQview)
  2646.  0Fh    DWORD    time process last got CPU (relative to start of DESQview)
  2647.  13h    DWORD    time process last gave up CPU (relative to start of DESQview)
  2648.  17h    DWORD    total CPU time since process started
  2649.  1Bh    DWORD    CPU time at start of current instantaneous interval
  2650.  1Fh    DWORD    CPU time in current instantaneous interval
  2651.  23h    DWORD    hook for other programs
  2652. Note:    all times are in 1/100s for v1.10, in 1/18s for v1.11+
  2653.  
  2654. Bitfields for DVSIXDI process flags:
  2655. Bit(s)    Description    (Table 2295)
  2656.  7    valid record
  2657.  6    (v2.00+) record is allocated; if bit 7 clear, process is "(starting)"
  2658.       and only offsets 01h and 09h are valid
  2659.  5    (v2.00+) this app currently owns the CPU
  2660.  4    reserved (0)
  2661.  3    DESQview system task
  2662.  2    reserved (0)
  2663.  1    task has keyboard (currently unused)
  2664.  0    task swapped out (currently unused)
  2665. --------Q-2FDE01BXFFFE-----------------------
  2666. INT 2F U - DESQview v2.26+ XDI - DVXMS.DVR - ???
  2667.     AX = DE01h
  2668.     BX = FFFEh
  2669.     CX = 4D47h ("MG")
  2670.     DX = 0052h (0,"R")
  2671. Return: AL = FFh
  2672.     DX = 584Dh
  2673. --------Q-2FDE02-----------------------------
  2674. INT 2F C - DESQview v2.26+ External Dev Interface - DV INITIALIZATION COMPLETE
  2675.     AX = DE02h
  2676.     BX = mapping context of DESQview
  2677.     DX = handle of DESQview system task
  2678. Note:    driver should pass this call to previous handler after doing its work
  2679. SeeAlso: AX=DE03h,AX=DE0Fh,INT 15/AX=5400h
  2680. --------Q-2FDE03-----------------------------
  2681. INT 2F C - DESQview v2.26+ External Dev Interface - DV TERMINATION
  2682.     AX = DE03h
  2683.     BX = mapping context of DESQview
  2684.     DX = handle of DESQview system task
  2685. Notes:    driver should pass this call to previous handler before doing its work
  2686.     DESQview makes this call when it is exiting, but before unhooking any
  2687.       interrupt vectors
  2688. SeeAlso: AX=DE02h,AX=DE0Fh,INT 15/AX=5407h
  2689. --------Q-2FDE04-----------------------------
  2690. INT 2F C - DESQview v2.26+ External Dev Interface - ADD PROCESS
  2691.     AX = DE04h
  2692.     BX = mapping context of new process (see #0318 at INT 15/AX=1016h)
  2693.     DX = handle of process
  2694. Return: nothing
  2695. Notes:    XMS XDI handler (installed by default) allocates a 22-byte record
  2696.       (see #2296) from "common" memory to control access to XMS memory
  2697.     all DOS, BIOS, and DV API calls are valid in handler
  2698.     driver should pass this call to previous handler after processing it
  2699. SeeAlso: AX=DE05h,AX=DE06h,INT 15/AX=5401h
  2700.  
  2701. Format of XMS XDI structure:
  2702. Offset    Size    Description    (Table 2296)
  2703.  00h    DWORD    pointer to 10-byte record???
  2704.  04h    DWORD    pointer to next XMS XDI structure
  2705.  08h    WORD    mapping context
  2706.  0Ah    BYTE    ???
  2707.  0Bh  5 BYTEs    XMS entry point to return for INT 2F/AX=4310h
  2708.         (FAR jump to next field)
  2709.  10h  6 BYTEs    FAR handler for XMS driver entry point
  2710.         (consists of a FAR CALL followed by RETF)
  2711. --------Q-2FDE05-----------------------------
  2712. INT 2F C - DESQview v2.26+ External Dev Interface - REMOVE PROCESS
  2713.     AX = DE05h
  2714.     BX = mapping context of process (see #0318 at INT 15/AX=1016h)
  2715.     DX = handle of last task in process
  2716. Return: nothing
  2717. Notes:    XMS XDI handler releases the structure allocated by AX=DE04h
  2718.     driver should pass this call to previous handler before processing it
  2719.     all DOS, BIOS, and DV API calls except those generating a task switch
  2720.       are valid in handler
  2721. SeeAlso: AX=DE04h,AX=DE07h,INT 15/AX=5402h
  2722. --------Q-2FDE06-----------------------------
  2723. INT 2F C - DESQview v2.26+ External Dev Interface - CREATE TASK
  2724.     AX = DE06h
  2725.     BX = mapping context of process containing task
  2726.     DX = handle of new task
  2727. Notes:    driver should pass this call to previous handler after processing it
  2728.     all DOS, BIOS, and DV API calls are valid in handler
  2729. --------Q-2FDE07-----------------------------
  2730. INT 2F C - DESQview v2.26+ External Dev Interface - TERMINATE TASK
  2731.     AX = DE07h
  2732.     BX = mapping context of process containing task
  2733.     DX = handle of task
  2734. Notes:    driver should pass this call to previous handler before processing it
  2735.     all DOS, BIOS, and DV API calls except those generating a task switch
  2736.       are valid in handler
  2737. SeeAlso: AX=DE04h,AX=DE06h,AX=DE10h
  2738. --------Q-2FDE08-----------------------------
  2739. INT 2F C - DESQview v2.26+ External Dev Interface - SAVE STATE
  2740.     AX = DE08h
  2741.     BX = mapping context of task being switched from
  2742.           (see #0318 at INT 15/AX=1016h)
  2743.     DX = handle of task being switched from
  2744. Notes:    invoked prior to task swap, interrupts, etc
  2745.     driver should pass this call to previous handler after processing it
  2746. SeeAlso: AX=DE09h,INT 15/AX=5403h,INT 15/AX=DE27h
  2747. --------Q-2FDE09-----------------------------
  2748. INT 2F C - DESQview v2.26+ External Dev Interface - RESTORE STATE
  2749.     AX = DE09h
  2750.     BX = mapping context of task being switched to
  2751.           (see #0318 at INT 15/AX=1016h)
  2752.     DX = handle of task being switched to
  2753. Notes:    state is restored except for interrupts
  2754.     driver should pass this call to previous handler before processing it
  2755. SeeAlso: AX=DE08h,INT 15/AX=5404h,INT 15/AX=DE27h
  2756. --------Q-2FDE0A-----------------------------
  2757. INT 2F C - DESQview v2.26+ External Dev Interface - CHANGE KEYBOARD FOCUS
  2758.     AX = DE0Ah
  2759.     BX = mapping context of task receiving focus
  2760.     DX = handle of running task
  2761. Notes:    driver should pass this call to previous handler before processing it
  2762.     this call often occurs inside a keyboard interrupt
  2763.     DV 2.42 does not provide this call to XDI handlers running inside a
  2764.       window; instead, it directly calls the INT 2F handler which was
  2765.       active at the time DV started
  2766. SeeAlso: INT 15/AX=DE26h,INT 15/AX=DE2Fh
  2767. --------Q-2FDE0B-----------------------------
  2768. INT 2F C - DESQview v2.26+ External Dev Interface - DVP PROCESSING COMPLETE
  2769.     AX = DE0Bh
  2770.     BX = mapping context of DESQview system task
  2771.     CX = number of system memory paragraphs required for the use of all
  2772.           XDI drivers (DV will add this to system memory in DVP buffer)
  2773.     DX = handle of DESQview system task
  2774.     SI = mapping context of new process if it starts
  2775.     ES:DI -> DVP buffer
  2776. Return: CX incremented as needed
  2777. Notes:    once DV invokes this function, the DVP buffer contents may be changed
  2778.     driver should pass this call to previous handler before processing it
  2779. --------Q-2FDE0C-----------------------------
  2780. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP OUT PROCESS
  2781.     AX = DE0Ch
  2782.     BX = mapping context of task being swapped out
  2783.           (see #0318 at INT 15/AX=1016h)
  2784.     DX = handle of DESQview system task
  2785. Note:    driver should pass this call to previous handler after processing it
  2786. --------Q-2FDE0D-----------------------------
  2787. INT 2F C - DESQview v2.26+ External Dev Interface - SWAP IN PROCESS
  2788.     AX = DE0Dh
  2789.     BX = mapping context of process just swapped in
  2790.           (see #0318 at INT 15/AX=1016h)
  2791.     DX = handle of DESQview system task
  2792. Note:    driver should pass this call to previous handler before processing it
  2793. --------Q-2FDE0E-----------------------------
  2794. INT 2F C - DESQview v2.26+ External Dev Interface - DVP START FAILED
  2795.     AX = DE0Eh
  2796.     BX = mapping context of DESQview system task
  2797.     DX = handle of DESQview system task
  2798.     SI = mapping context of failed process (same as for call to AX=DE0Bh)
  2799. Note:    driver should pass this call to previous handler after processing it
  2800. --------Q-2FDE0F-----------------------------
  2801. INT 2F C - DESQview v2.50+ External Dev Interface - INITIALIZE DV
  2802.     AX = DE0Fh
  2803. Note:    DESQview 2.50+ calls this function just before it completes its
  2804.       initialization.  At the time of the call, DESQview has not yet
  2805.       changed any interrupt vectors
  2806. SeeAlso: AX=DE02h
  2807. --------Q-2FDE10-----------------------------
  2808. INT 2F C - DESQview v2.50+ External Dev Interface - FREE TASK
  2809.     AX = DE10h
  2810.     BX = mapping context of process (see #0318 at INT 15/AX=1016h)
  2811.     DX = task handle of process
  2812. Note:    DESQview 2.50+ calls this function before it frees the task; it is
  2813.       similar to AX=DE07h but allows the XDI handler to make calls which
  2814.       cause context switches
  2815. SeeAlso: AX=DE06h,AX=DE07h
  2816. --------c-2FDF00-----------------------------
  2817. INT 2F - HyperWare programs - INSTALLATION CHECK
  2818.     AX = DF00h
  2819.     BX = product code (see #2297)
  2820.     CX = 0000h
  2821.     DX = 0000h
  2822. Return: AL = status
  2823.         00h not installed
  2824.         FFh multiplex number in use
  2825.         CX = 5948h ('YH') if selected product installed
  2826.         ---HyperDisk---
  2827.         BX = code segment of resident portion
  2828.         DX = HyperDisk local data version
  2829. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2830. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2831. SeeAlso: INT 13/AX=8EEDh
  2832. Index:    installation check;HyperDisk|installation check;HyperStb
  2833. Index:    installation check;HyperKey|installation check;HyperScreen
  2834. Index:    HyperDisk;installation check|HyperStb;installation check
  2835. Index:    HyperKey;installation check|HyperScreen;installation check
  2836.  
  2837. (Table 2297)
  2838. Values for HyperWare product code:
  2839.  4248h    ('BH') HyperStb
  2840.  4448h    ('DH') HyperDisk v4.20+
  2841.  4B48h    ('KH') HyperKey
  2842.  5348h    ('SH') HyperScreen
  2843. --------Q-2FDF00BX5445-----------------------
  2844. INT 2F U - Quarterdeck TELTSR.COM - INSTALLATION CHECK
  2845.     AX = DF00h
  2846.     BX = 5445h ('TE')
  2847.     CX = 4C54h ('LT')
  2848.     DX = 5352h ('SR')
  2849. Return: BX = 5454h ('TT') if installed
  2850.     CX = 494Eh ('IN') if installed
  2851.     DX = 5454h ('ST') if installed
  2852. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  2853.       which provides an INT 14h interface to the network
  2854. Range:    AH=DEh to AH=FFh and AH=C0h to AH=DDh, selected by scanning
  2855. SeeAlso: AX=DF01h"TELTSR",AX=DF02h"TELTSR",INT 14/AH=56h
  2856. --------N-2FDF01BX0000-----------------------
  2857. INT 2F U - MSG.COM - INSTALLATION CHECK
  2858.     AX = DF01h
  2859.     BX = 0000h
  2860. Return: AX = FDFFh if installed
  2861.        BX = segment of resident code
  2862. Program: MSG.COM is a TSR for intercepting incoming Novell broadcast
  2863.       messages written by Gary Dobbins (Dobbins@Arizona.Edu)
  2864. --------c-2FDF01BX4448-----------------------
  2865. INT 2F - HyperDisk v4.50+ - GET CURRENT CACHE STATE
  2866.     AX = DF01h
  2867.     BX = 4448h ('DH')
  2868. Return: AX = 0000h if function supported
  2869.         BX = number of cache buffers in use
  2870.         CX = number of cache buffers which have been modified
  2871.         DL = caching flags (see #2298)
  2872. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2873. SeeAlso: AX=DF00h,AX=DF02h
  2874.  
  2875. Bitfields for HyperDisk caching flags:
  2876. Bit(s)    Description    (Table 2298)
  2877.  0    staged writes enabled for floppy disks
  2878.  1    staged writes enabled for hard disks
  2879.  2    writes verified on floppy disks
  2880.  3    writes verified on hard disks
  2881.  4    reserved (0)
  2882.  5    reserved (0)
  2883.  6    floppy caching enabled
  2884.  7    all caching functions enabled
  2885. --------Q-2FDF01-----------------------------
  2886. INT 2F U - Quarterdeck TELTSR.COM - CLOSE CONNECTION
  2887.     AX = DF01h
  2888. Return: nothing???
  2889. Note:    invokes the DESQview/X socket API (see INT 15/AX=DE2Eh) function 0006h
  2890.       to close the socket corresponding to the file handle set with
  2891.       AX=DF02h; NOP if no file handle was ever set
  2892. SeeAlso: AX=DF00h"TELTSR",AX=DF02h"TELTSR"
  2893. --------c-2FDF02BX4448-----------------------
  2894. INT 2F - HyperDisk v4.50+ - SET CACHE STATE
  2895.     AX = DF02h
  2896.     BX = 4448h ('DH')
  2897.     DL = new caching flags (see #2298)
  2898. Return: AX = 0000h if supported
  2899.         BX = number of cache buffers in use
  2900.         CX = number of cache buffers which have been modified
  2901.         DL = previous caching flags (see #2298)
  2902. Program: HyperDisk is a shareware disk cache by HyperWare (Roger Cross)
  2903. Range:    AH=C0h to AH=FFh, selected by scanning AH=DFh, then AH=C0h-FFh
  2904. SeeAlso: AX=DF00h,AX=DF01h
  2905. --------Q-2FDF02-----------------------------
  2906. INT 2F U - Quarterdeck TELTSR.COM - OPEN CONNECTION
  2907.     AX = DF02h
  2908.     BX = file handle for connection's socket
  2909. Return: AX = status
  2910.         0000h successful
  2911.         FFFFh no more room in TELTSR's JFT
  2912. Program: TELTSR is a Telnet TSR included with Quarterdeck's DESQview/X v2.00
  2913. Notes:    the indicated file handle becomes owned by TELTSR, and is closed in
  2914.       the caller's JFT
  2915.     multiple calls to this function will override the previous assignment
  2916.       without closing the previous file; use AX=DF01h before further calls
  2917. SeeAlso: AX=DF00h"TELTSR",AX=DF01h"TELTSR"
  2918. --------U-2FE000-----------------------------
  2919. INT 2F - SETDRVER.COM v2.10+ - INSTALLATION CHECK
  2920.     AX = E000h
  2921. Return: AX = 4A52h ("JR") if present
  2922. Program: SETDRVER is a public domain TSR by Jacob Rieper which sets the
  2923.       apparent DOS version analogously to MS-DOS SETVER
  2924. Notes:    this installation check differs from the usual one of returning AL=FFh
  2925.     the SETDRVER API is fully emulated by Matthias Paul's FREEVER
  2926. SeeAlso: AX=E000h/DX=4D50h,AX=E001h,INT 21/AH=52h
  2927. --------j-2FE000-----------------------------
  2928. INT 2F - KAOSHIDE - INSTALLATION CHECK
  2929.     AX = E000h
  2930. Return: AL = FFh if installed
  2931. Program: KAOSHIDE ('Hidden Kaos') is a PD joke TSR which randomly capitalizes
  2932.       alphabetic keys, written by Philip Maland. Although not a virus,
  2933.       v2.0 uses some viral-like techniques to hide itself from
  2934.       memory-reports by reducing DOS memory size.
  2935. --------U-2FE000DX4D50-----------------------
  2936. INT 2F - FREEVER v1.0+ - INSTALLATION CHECK
  2937.     AX = E000h
  2938.     DX = 4D50h ('MP')
  2939. Return: AL = FFh if installed
  2940.         AH = AMIS INT 2Dh multiplex ID
  2941.         CX = FREEVER version (CH=major, CL=minor)
  2942.         DX:DI -> AMIS-compliant signature (see #1856)
  2943.         (vendor ID is "M. Paul ", program name is "FREEVER ")
  2944. Program: FREEVER is an AMIS-conformant freeware DOS version-faking TSR similar
  2945.       to SETVER for any DOS-compatible OS, written by Matthias Paul
  2946. Note:    FREEVER emulates INT 21/AH=30h, INT 21/AX=3306h, INT 21/AX=4412h,
  2947.       INT 21/AX=4452h, and SETDRVER's API on INT 2F/AX=E00xh, as well as
  2948.       providing an AMIS API on INT 2Dh
  2949. SeeAlso: AX=E000h"SETDRVER",INT 21/AH=30h,INT 21/AX=3306h,INT 21/AX=4452h
  2950. --------K-2FE000DX5354-----------------------
  2951. INT 2F - StuffIt v3.21+ - INSTALLATION CHECK
  2952.     AX = E000h
  2953.     DX = 5354h ("ST")
  2954. Return: AL = FFh if installed
  2955.         BX = version (BH = major, BL = BCD minor)
  2956.         DX = segment of resident code
  2957. Program: StuffIt is a freeware delayed keyboard stuffer by Terje Mathisen
  2958. --------U-2FE001-----------------------------
  2959. INT 2F - SETDRVER.COM v2.10+ - GET SETDRVER VERSION
  2960.     AX = E001h
  2961. Return: AH = major version
  2962.     AL = minor version
  2963. SeeAlso: AX=E000h
  2964. --------U-2FE002-----------------------------
  2965. INT 2F - SETDRVER.COM v2.10+ - GET ORIGINAL DOS VERSION INFO
  2966.     AX = E002h
  2967. Return: AL = FFh if successful
  2968.         BH = major DOS version
  2969.         BL = minor DOS version
  2970.         CH = DOS version flag
  2971.         CL = OEM number
  2972.         DH = major DR DOS version number (FFh if unknown)
  2973.         DL = minor DR DOS version number (FFh if unknown)
  2974. SeeAlso: AX=E003h,AX=E007h,INT 21/AH=30h
  2975. --------U-2FE003-----------------------------
  2976. INT 2F - SETDRVER.COM v2.10+ - RESET INTERNAL VARIABLES
  2977.     AX = E003h
  2978.     BH = new major DOS version
  2979.     BL = new minor DOS version
  2980.     CH = new DOS version flag
  2981.     CL = new DOS revision number
  2982.     DH = new OEM number
  2983. SeeAlso: AX=E002h
  2984. --------U-2FE004-----------------------------
  2985. INT 2F - SETDRVER.COM v2.10+ - ENABLE TSR
  2986.     AX = E004h
  2987. Return: AL = FFh if successful
  2988. SeeAlso: AX=E000h,AX=E005h,AX=E006h
  2989. --------U-2FE005-----------------------------
  2990. INT 2F - SETDRVER.COM v2.10+ - DISABLE TSR
  2991.     AX = E005h
  2992. Return: AL = FFh if successful
  2993. SeeAlso: AX=E000h,AX=E004h,AX=E006h
  2994. --------U-2FE006-----------------------------
  2995. INT 2F - SETDRVER.COM v2.10+ - GET TSR STATUS
  2996.     AX = E006h
  2997. Return: AL = FFh if successful
  2998.         BL = status
  2999.         01h resident and active
  3000.         02h resident and inactive
  3001. --------U-2FE007-----------------------------
  3002. INT 2F - SETDRVER.COM v2.10+ - GET TaskMAX STATUS AT INSTALLATION
  3003.     AX = E007h
  3004. Return: AL = FFh if successful
  3005.         BL = status
  3006.         00h if TaskMAX not loaded before SETDRVER
  3007.         FFh if TaskMAX was loaded before SETDRVER
  3008. SeeAlso: AX=E003h
  3009. --------U-2FE0-------------------------------
  3010. INT 2F - SETDRVER.COM - RESERVED FOR FUTURE USE
  3011.     AH = E0h
  3012.     AL = 08h-10h
  3013. --------K-2FE100-----------------------------
  3014. INT 2F - Phantom2 v1.1+ - INSTALLATION CHECK
  3015.     AX = E100h
  3016. Return: AX = 0001h if installed
  3017.         DS:SI -> ASCIZ hotkey name
  3018.         DS:DI -> ASCIZ recording filename
  3019. Program: Phantom of the Keyboard II is a shareware keystroke recorder/replayer
  3020.       by P2 Enterprises
  3021. SeeAlso: AX=E101h,AX=E102h,AX=E103h,AX=E300h
  3022. Index:    hotkeys;Phantom2
  3023. --------K-2FE101-----------------------------
  3024. INT 2F - Phantom2 v1.1+ - FUNCTION REQUEST
  3025.     AX = E101h
  3026.     BX = function mask (see #2299)
  3027.     CX = code for hotkey (as returned by INT 16/AH=00h) if BX bit 6 set
  3028.     DS:DX -> ASCIZ filespec if BX bit 7 set
  3029. SeeAlso: AX=E100h
  3030. Index:    hotkeys;Phantom2
  3031.  
  3032. Bitfields for Phantom2 function mask:
  3033. Bit(s)    Description    (Table 2299)
  3034.  0    record
  3035.  1    play
  3036.  2    QuickPlay
  3037.  3    loop
  3038.  4    mode display toggle
  3039.  5    sound toggle
  3040.  6    set hotkey
  3041.  7    set filespec
  3042. --------K-2FE102-----------------------------
  3043. INT 2F - Phantom2 v1.1+ - UNINSTALL
  3044.     AX = E102h
  3045. Return: AX = status
  3046.         0001h removal successful
  3047.         0002h not installed as TSR
  3048.         FFFFh disabled but not removed
  3049. SeeAlso: AX=E100h
  3050. --------K-2FE103-----------------------------
  3051. INT 2F - Phantom2 v2.8 - SET ??? FLAG
  3052.     AX = E103h
  3053. Return: AX = 0001h
  3054. SeeAlso: AX=E100h
  3055. --------y-2FE200-----------------------------
  3056. INT 2F - SecureDevice - LOGIN TO DRIVE
  3057.     AX = E200h
  3058.     DL = drive number (0 = A:)
  3059.     DS:SI -> 104-byte key
  3060. Return: AL = status
  3061.         00h unable to determine key's validity
  3062.         01h key is valid
  3063.         FFh key is invalid
  3064. Program: SecureDevice is a copylefted device driver by Max Loewenthal and
  3065.       Arthur Helwig which turns one or more disk files into encrypted
  3066.       logical drives
  3067. SeeAlso: AX=E201h,AX=E203h,AX=E209h
  3068. --------y-2FE201-----------------------------
  3069. INT 2F - SecureDevice - GET INFORMATION
  3070.     AX = E201h
  3071.     DX = driver index (0000h = first loaded)
  3072. Return: AL = number of volumes handled by driver
  3073.     DL = drive number of first volume (00h = A:)
  3074. SeeAlso: AX=E200h,AX=E203h,AX=E209h
  3075. --------y-2FE203-----------------------------
  3076. INT 2F - SecureDevice - DESTROY PASSWORD (LOGOUT FROM DRIVE)
  3077.     AX = E203h
  3078.     DL = drive number (00h = A:) or FFh for all drives
  3079. Return: nothing
  3080. SeeAlso: AX=E200h,AX=E209h
  3081. --------y-2FE209DX0000-----------------------
  3082. INT 2F - SecureDevice - INSTALLATION CHECK
  3083.     AX = E209h
  3084.     DX = 0000h
  3085. Return: AX = 1DEAh if installed
  3086.         DX = number of drivers installed
  3087. --------K-2FE300-----------------------------
  3088. INT 2F - ANARKEY.COM - INSTALLATION CHECK
  3089.     AX = E300h
  3090. Return: AL = state
  3091.         00h not installed
  3092.         FEh if installed but suspended (v3.0+)
  3093.         FFh installed
  3094. Program: ANARKEY.COM is a commandline recall program by Steven Calwas
  3095. Range:    AH=C0h to AH=FFh, selected by commandline switch
  3096. SeeAlso: AX=E100h,AX=E301h,AX=E302h,AX=E303h,AX=E304h,AX=E305h,AX=E306h
  3097. SeeAlso: AX=E307h,INT 66"Newkey"
  3098. --------V-2FE300-----------------------------
  3099. INT 2F - Blank - INSTALLATION CHECK
  3100.     AX = E300h
  3101. Return: AL = FFh if installed
  3102.         ES = resident code segment
  3103. Program: Blank is a shareware screen blanker by Yonah Schmeidler
  3104. Note:    AH=E3h is the default, which may be reconfigured by the installation
  3105.       program in the registered version
  3106. SeeAlso: AH=93h,AX=C050h,INT 14/AX=AA01h
  3107. Index:    screen saver;Blank
  3108. --------K-2FE301-----------------------------
  3109. INT 2F U - ANARKEY.COM v2+ - GET ???
  3110.     AX = E301h
  3111. Return: DX:BX -> ??? (see #2300,#2301)
  3112. SeeAlso: AX=E300h
  3113.  
  3114. Format of returned data structure for ANARKEY v2.0:
  3115. Offset    Size    Description    (Table 2300)
  3116.  -7   7 BYTEs    signature ('ANARKEY')
  3117.  00h    WORD    ??? (I see 0001h in v2.0)
  3118.  02h    WORD    ??? (I see 0001h in v2.0)
  3119.  04h    WORD    ??? (I see 0 in v2.0)
  3120.  06h    WORD    PSP segment of next program loaded
  3121.  
  3122. Format of returned data structure for ANARKEY v3+:
  3123. Offset    Size    Description    (Table 2301)
  3124.  -1    BYTE    multiplex number
  3125.  00h    WORD    ??? (I see 0001h in v3.0-4.0)
  3126.  02h    WORD    ??? (I see 0001h in v3.0-4.0)
  3127.  04h    BYTE    ??? (I see 0 in v3.0-4.0)
  3128.  05h    WORD    PSP segment of next program loaded
  3129. --------K-2FE302-----------------------------
  3130. INT 2F U - ANARKEY.COM v3+ - ???
  3131.     AX = E302h
  3132.     BL = ???
  3133. Return: ???
  3134. SeeAlso: AX=E300h
  3135. --------K-2FE303-----------------------------
  3136. INT 2F U - ANARKEY.COM v3+ - ANARKMD API
  3137.     AX = E303h
  3138.     BL = function
  3139.         01h toggle insert mode
  3140.         02h display contents of history buffer
  3141.         03h write history buffer to file
  3142.         ES:DX -> file name
  3143.         04h clear history buffer
  3144.         05h undefine all aliases
  3145.         06h show aliases
  3146.         07h list programs using Unix switchar
  3147.         08h jump to bottom of history buffer
  3148.         09h (v4.0) add string to history buffer
  3149.         ES:DX -> ASCIZ string
  3150.         0Ah (v4.0) ???
  3151.         ES:DX -> ???
  3152.         0Bh (v4.0) copy string to edit buffer for use as next input line
  3153.         ES:DX -> ASCIZ string
  3154.         0Ch (v4.0) ???
  3155.         0Dh (v4.0) copy ??? to ???
  3156.         0Eh (v4.0) ???
  3157.         0Fh (v4.0) ???
  3158.         10h (v4.0) set ??? flag
  3159.         11h (v4.0) display error message about running in EMS under Windows
  3160. Return: ???
  3161. SeeAlso: AX=E300h
  3162. --------K-2FE304-----------------------------
  3163. INT 2F U - ANARKEY.COM v2+ - ???
  3164.     AX = E304h
  3165.     BL = ???
  3166. Return: ???
  3167. SeeAlso: AX=E300h
  3168. --------K-2FE305-----------------------------
  3169. INT 2F U - ANARKEY.COM v3+ - ENABLE/SUSPEND ANARKEY
  3170.     AX = E305h
  3171.     BL = new state
  3172.         01h suspended
  3173.         00h enabled
  3174. SeeAlso: AX=E300h
  3175. --------K-2FE306-----------------------------
  3176. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3177.     AX = E306h
  3178. Return: AX = ???
  3179. SeeAlso: AX=E300h
  3180. --------K-2FE307-----------------------------
  3181. INT 2F U - ANARKEY.COM v4.0 - GET ???
  3182.     AX = E307h
  3183. Return: AX = ???
  3184.     BL = ???
  3185. SeeAlso: AX=E300h
  3186. --------K-2FE337-----------------------------
  3187. INT 2F - INT16.COM - INSTALLATION CHECK
  3188.     AX = E337h
  3189. Return: AX = 0013h if installed
  3190. Program: INT16.COM is an INT16 keyboard BIOS replacement for
  3191.       INT 16/AH=00h-02h,10h-12h (based on K3) written by Martin Gerdes
  3192.       and published in c't 05/1990.
  3193. SeeAlso: AX=ED58h
  3194. --------l-2FE44D-----------------------------
  3195. INT 2F - NDOS - API
  3196.     AX = E44Dh
  3197. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  3198.       Norton Utilities
  3199. Note:    as NDOS is a licensed version of 4DOS v3.03, the API is identical to
  3200.       that for 4DOS, except that AH=E4h instead of D4h and the installation
  3201.       check returns AX=44EEh instead of AX=44DDh
  3202. SeeAlso: AX=D44Dh,AX=E44Eh
  3203. --------l-2FE44E-----------------------------
  3204. INT 2F C - NDOS - AWAITING USER INPUT
  3205.     AX = E44Eh
  3206.     BX = condition
  3207.         0000h NDOS is ready to display prompt
  3208.         0001h NDOS has displayed the prompt, about to accept user input
  3209. Return: handler must preserve SI, DI, BP, SP, DS, ES, and SS
  3210. SeeAlso: AX=E44Dh
  3211. --------K-2FE44FBX0000-----------------------
  3212. INT 2F - NDOS v4.0+ - KSTACK.COM - INSTALLATION CHECK
  3213.     AX = E44Fh
  3214.     BX = 0000h
  3215. Return: AX = 44EEh if installed
  3216. Program: NDOS is a version of 4DOS licensed to Symantec for inclusion in the
  3217.       Norton Utilities
  3218. Note:    this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3219.       which emulate the 4DOS and NDOS keystack
  3220. SeeAlso: AX=D44Fh/BX=0000h,AX=E44Fh/BX=0001h
  3221. --------K-2FE44FBX0001-----------------------
  3222. INT 2F - NDOS v4.0+ - KSTACK.COM - PLACE KEYSTROKES INTO KEYSTACK
  3223.     AX = E44Fh
  3224.     BX = 0001h
  3225.     CX = number of keystrokes (01h-FFh)
  3226.     DS:DX -> keystroke list (one word per keystroke)
  3227. Return: AX = status
  3228.         0000h successful
  3229.         nonzero failed
  3230.     BX,CX,DX destroyed
  3231. Notes:    the keystrokes are the exact values to return from subsequent calls to
  3232.       INT 16 with AH=00h,01h,10h, or 11h, with the following exceptions:
  3233.         0000h causes subfunctions 01h and 11h to indicate an empty
  3234.               keyboard buffer
  3235.         FFFFh is followed by a word indicating the number of clock
  3236.               ticks to delay before the next faked keystroke
  3237.     v4.00 KSTACK overwrites any unread keystrokes from the previous
  3238.       invocation, and does not range-check CX; it will overwrite memory
  3239.       following the resident portion if CX is greater than 100h.
  3240.     this function is also supported by ANSIPLUS v3.01+ and K3PLUS v6.20+,
  3241.       which emulate the 4DOS and NDOS keystack
  3242. SeeAlso: AX=E44Fh/BX=0000h,INT 16/AH=00h,INT 21/AX=4403h
  3243. --------U-2FE600-----------------------------
  3244. INT 2F - Virtual 486 - INSTALLATION CHECK
  3245.     AX = E600h
  3246.     CL = 30h
  3247.     BX = C0DEh
  3248. Return: BX = DEC0h if installed
  3249. Program: Virtual 486 is a 80486 CPU emulator for an 80386 by Solar Designer
  3250. --------f-2FE77EBX0000-----------------------
  3251. INT 2F - CTDEMN - INSTALLATION CHECK
  3252.     AX = E77Eh
  3253.     BX = 0000h
  3254.     CX = 4F4Dh ('OM')
  3255.     DX = 5453h ('TS')
  3256. Return: AX = 7EE7h if installed
  3257.         BX = resident code segment
  3258.         CX = 6F6Dh ('om')
  3259.         DX = 7473h ('ts')
  3260. Program: CTDEMN is a file daemon TSR by Simultan AG
  3261. --------E-2FED00-----------------------------
  3262. INT 2F - Phar Lap DOS EXTENDERS - INSTALLATION CHECK
  3263.     AX = ED00h
  3264.     BL = DOS extender ID (see #2302)
  3265. Return: AL = status
  3266.         00h not installed
  3267.         FFh installed
  3268.         SI = 5048h ("PH")
  3269.         DI = 4152h ("AR")
  3270.         CH = major version number
  3271.         CL = minor version number
  3272.         DX = flags
  3273.             bit 0: running under DPMI
  3274.             bit 1: running under Phar Lap VMM
  3275.         if running under DPMI:
  3276.             BX = DPMI version (BH = major, BL = minor)
  3277. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h
  3278.  
  3279. (Table 2302)
  3280. Values for Phar Lap DOS extender ID:
  3281.  01h    286dosx v1.3+ (Software Development Kit)
  3282.  02h    286dosx v1.3+ (Run-Time Kit)
  3283.  03h    386dosx v4.0+ (SDK)
  3284.  04h    386dosx v4.0+ (RTK)
  3285. --------E-2FED03-----------------------------
  3286. INT 2F R - Phar Lap 386/DOS-Extender v4.1 - GET EXTENDER ENTRY POINT
  3287.     AX = ED03h
  3288.     CX = real-mode code segment
  3289.     DX = real-mode data segment
  3290. Return: CF clear if successful
  3291.         CX = protected-mode code segment selector
  3292.         DX = protected-mode data segment selector
  3293.         ES:DI -> real-mode entry point for calling protected-mode functions
  3294.               (see INT 21/AX=250Dh)
  3295.     CF set on error
  3296.         AX = error code
  3297.         0008h unable to allocate LDT descriptors
  3298. --------E-2FED10BL05-------------------------
  3299. INT 2F - Pharlap DOS Extender - ???
  3300.     AX = ED10h
  3301.     BL = 05h
  3302.     ES:SI -> ??? structure
  3303. Return:    AX = ???
  3304.     SI = ???
  3305.     DI = ???
  3306. SeeAlso: AX=ED00h,AX=ED11h
  3307. --------E-2FED11BL05-------------------------
  3308. INT 2F - Pharlap DOS Extender - FATAL EXIT TO REAL MODE ???
  3309.     AX = ED11h
  3310.     BL = 05h
  3311.     CX = ???
  3312.     DX = ???
  3313.     ES:SI -> ??? structure
  3314.     SS:SP = new stack ???
  3315. Return: ???
  3316. Note:    called immediately prior to terminating program with INT 21/AX=4CFFh
  3317. SeeAlso: AX=ED00h,AX=ED10h
  3318. --------K-2FED58-----------------------------
  3319. INT 2F U - K5.COM - INSTALLATION CHECK
  3320.     AX = ED58h
  3321. Return: AX = 000Dh if installed
  3322.         ES = resident code segment
  3323.         BX = ??? (9999h)
  3324.         ???
  3325. Program: K5 is an extended keyboard driver by Martin Gerdes, based on his K3
  3326. SeeAlso: AX=E337h,INT 16/AX=AF20h
  3327. --------E-2FED80-----------------------------
  3328. INT 2F - Phar Lap 286|DOS Extender Lite v2.5 - ???
  3329.     AX = ED80h
  3330.     BL = DOS extender ID (see #2302)
  3331.     SI = 5048h ("PH")
  3332.     DI = 4152h ("AR")
  3333.     ???
  3334. Return: ???
  3335. --------O-2FEDC8BX0000-----------------------
  3336. INT 2F - Novell ??? - INSTALLATION CHECK???
  3337.     AX = EDC8h ('EDC' = Novell European Development Center)
  3338.     BX = 0000h
  3339.     CX = 0000h
  3340.     DX = 1234h
  3341. Return: ???
  3342. Desc:    called by Novell DOS 7 LOCK command during installation; purpose
  3343.       unknown
  3344. --------y-2FEE00-----------------------------
  3345. INT 2F - GRIDLOC.EXE - INSTALLATION CHECK
  3346.     AX = EE00h
  3347. Return: AL = FFh if installed
  3348. Program: GRIDLOC is a PC security program by Intelligent Security Systems, Inc.
  3349. SeeAlso: INT 21/AH=40h"NB.SYS"
  3350. --------U-2FEE00-----------------------------
  3351. INT 2F - XVIEW - INSTALLATION CHECK
  3352.     AX = EE00h
  3353. Return: AX = 00FFh if installed
  3354. Program: XVIEW is a hypertext viewer by Flambeaux Software, Inc.
  3355. --------N-2FEE00-----------------------------
  3356. INT 2F - WEB v4.02 - INSTALLATION CHECK
  3357.     AX = EE00h
  3358. Return: AL = status
  3359.         00h not installed
  3360.         FFh installed
  3361. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3362. SeeAlso: AH=EEh"WEB",AX=EEF0h
  3363. --------U-2FEE01-----------------------------
  3364. INT 2F - XVIEW - POP UP GIVING TOPIC SEARCH KEYWORD
  3365.     AX = EE01h
  3366.     DS:DX -> ASCIZ string containing case-insensitive keyword to look up
  3367. Return: AX = status (see #2303)
  3368. Note:    the specified keyword should be a hyperlink in the _IndexPage of some
  3369.       database; the current database is searched first
  3370. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE03h,AX=EE04h,AX=EE06h
  3371.  
  3372. (Table 2303)
  3373. Values for XVIEW function status:
  3374.  0000h    successful
  3375.  00F1h    unknown subfunction
  3376.  00F2h    unable to pop up
  3377. --------U-2FEE02-----------------------------
  3378. INT 2F - XVIEW - POP UP GIVING A PAGE NUMBER
  3379.     AX = EE02h
  3380.     DX = physical page number or anchor page number (see #2304)
  3381. Return: AX = status (see #2303)
  3382. Note:    physical page numbers are assigned by the hypertext compiler, and
  3383.       will change if a page is inserted in the middle
  3384. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE05h,AX=EE06h
  3385.  
  3386. (Table 2304)
  3387. Values for XVIEW anchor page number:
  3388.  FFEAh    _Credits
  3389.  FFECh    _SearchTopics
  3390.  FFEDh    _SearchText
  3391.  FFF0h    _ManualList
  3392.  FFF5h    _HelpOnHelp
  3393.  FFF8h    _HomePage
  3394.  FFF9h    _IndexPage
  3395. --------U-2FEE03-----------------------------
  3396. INT 2F - XVIEW - POP UP GIVING FILENAME AND SEARCH TOPIC OR PAGE NUMBER
  3397.     AX = EE03h
  3398.     DS:DX -> data packet (see #2305)
  3399. Return: AX = status (see #2303)
  3400. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE06h
  3401.  
  3402. Format of XVIEW data packet:
  3403. Offset    Size    Description    (Table 2305)
  3404.  00h    DWORD    -> ASCIZ database filespec (0000h:0000h for current database)
  3405.  04h    DWORD    -> ASCIZ text to look up or 0000h:0000h
  3406.  08h    WORD    page number (0000h if keyword used)
  3407.  0Ah  6 BYTEs    reserved
  3408. --------U-2FEE04-----------------------------
  3409. INT 2F - XVIEW - POP UP AND READ SCREEN FOR SEARCH TOPIC KEYWORD
  3410.     AX = EE04h
  3411. Return: AX = status (see #2303)
  3412. Note:    equivalent to the action taken when the user presses the Alt-L hotkey
  3413. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE03h,AX=EE06h
  3414. --------U-2FEE05-----------------------------
  3415. INT 2F - XVIEW - POP UP TO MOST-RECENTLY VIEWED PAGE
  3416.     AX = EE05h
  3417. Return: AX = status (see #2303)
  3418. Note:    equivalent to the action taken when the user presses the Alt-H hotkey
  3419. SeeAlso: AX=EE00h"XVIEW",AX=EE02h,AX=EE06h
  3420. --------U-2FEE06-----------------------------
  3421. INT 2F - XVIEW - WAIT FOR POP-DOWN AND GET EXIT CODE
  3422.     AX = EE06h
  3423. Return: AX = status (see also AX=EE01h)
  3424.         0001h specified filename is not an xText database
  3425.         0002h no databases found
  3426.         0003h bad data in file
  3427.         0004h memory shortage
  3428.         0005h unable to open the requested file
  3429.         0007h invalid page number for file
  3430. Note:    although this call is not required, the exit code can alert the
  3431.       caller to problems; if the call is not made, the program should
  3432.       enforce a delay of about 1/2 second to allow the viewer to pop up,
  3433.       and should not get keyboard input or attempt disk accesses during
  3434.       the delay
  3435. SeeAlso: AX=EE00h"XVIEW",AX=EE01h,AX=EE02h,AX=EE03h,AX=EE04h,AX=EE05h
  3436. --------N-2FEE-------------------------------
  3437. INT 2F - WEB v4.02 - WEB MODULE INSTALLATION CHECK
  3438.     AH = EEh
  3439.     AL = module ID (see #2306)
  3440. Return: AX = 0000h if installed
  3441.         ES:DI -> far entry point for module-specific API calls
  3442.           (see #2307,#2308,#2309,#2310,#2311)
  3443. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3444. SeeAlso: AX=EE00h"WEB"
  3445.  
  3446. (Table 2306)
  3447. Values for WEB module ID:
  3448.  10h    server module (SERVER.EXE)
  3449.  20h    client module (CLIENT.EXE)
  3450.  30h    mail module (MAIL.EXE)
  3451.  40h    spooler (PCSPOOL.EXE)
  3452.  50h    kernel module (KERNEL.EXE)
  3453.  60h    SAP module (KERNEL.EXE)
  3454.  70h    resident station manager (SM.EXE)
  3455.  90h    router module (ROUTER.EXE)
  3456.  
  3457. (Table 2307)
  3458. Call server module entry point with:
  3459.     BX = function
  3460.         0000h remove server module
  3461.         Return: AX = status (0000h if successful, else WEB error code)
  3462.         0001h create SYSINFO file
  3463.         Note:    the SYSINFO file is used by the station manager when
  3464.               displaying info for a particular station
  3465.         0002h get server object table
  3466.         Return: CX = number of server objects
  3467.             ES:DI -> server object table
  3468.         Note:    server objects include drives and devices that the
  3469.               server module controls
  3470.         0003h get server variables
  3471.         Return: ES:DI -> server variables
  3472.  
  3473. (Table 2308)
  3474. Call client module entry point with:
  3475.     BX = function
  3476.         0000h remove client module
  3477.         Return: AX = status (0000h if successful, else WEB error code)
  3478.         0001h decrement client-only flag
  3479.         0002h increment client-only flag
  3480.         0005h set device capture
  3481.         Note:    decrements DeviceOutput flag, telling the spooler that
  3482.               it may trap device output again
  3483.         0006h clear device capture
  3484.         Note:    increments DeviceOutput flag, telling the spooler that
  3485.               it should not trap device output (this is used
  3486.               internally by the spooler to prevent it from trapping
  3487.               its own output)
  3488.         0007h get client debug pointer
  3489.         Return: ES:DI -> client debug data structure (see #2312)
  3490.         0008h get root drive
  3491.         Return: AL = WEB startup drive
  3492.         0009h get maximum possible drive/device redirections
  3493.         Return: AL = maximum drive redirections
  3494.             CH = maximum LPTx redirections
  3495.             CL = maximum COMx redirections
  3496.         000Ah suspend client
  3497.         Return: AX = previous value of Suspend flag
  3498.         000Bh resume client
  3499.         Return: AX = previous value of Suspend flag
  3500.         000Ch get instance data
  3501.         CX = maximum number of structures in array
  3502.         ES:DI -> buffer for array of WIN_INSTANCE_DATA structures
  3503.               (see #2313)
  3504.         Return: CX = number of structures actually returned
  3505.         Note:    used internally by WEB4WIN
  3506.  
  3507. (Table 2309)
  3508. Call mail module entry point with:
  3509.     BX = function
  3510.         0000h remove mail module
  3511.         Return: AX = status (0000h successful, else WEB error code)
  3512.         0001h set mail poll
  3513.         Note:    schedules the WEB mail module
  3514.         0002h set mail notify
  3515.         Note:    sets the Notify flag, which determines whether the
  3516.               user will be notified when mail is received
  3517.         0003h clear mail notify
  3518.         Note:    clears the Notify flag, which determines whether the
  3519.               user will be notified when mail is received
  3520.         0004h check whether new mail has arrived
  3521.         Return: AL = new mail status
  3522.                 00h no new mail since last call
  3523.                 else new mail has arrived
  3524.         Note:    also clears the new-mail flag after retrieving it
  3525.         0005h send notify
  3526.         ES:DI -> name of WEB user to be notified
  3527.         0006h get post office
  3528.         Return: ES:DI -> full network path of Post Office subdirectory
  3529.  
  3530. (Table 2310)
  3531. Call spooler entry point with:
  3532.     BX = function
  3533.         0000h remove PCSpool module
  3534.         Return: AX = status (0000h successful, else WEB error code)
  3535.         0001h set spooler poll
  3536.         Note:    schedules the WEB spooler
  3537.         0002h check spooler changed
  3538.         Return:    AX = 0000h
  3539.         Note:    this call is a NOP in current versions of WEB
  3540.  
  3541. (Table 2311)
  3542. Call kernel entry point with:
  3543.     BX = function
  3544.         0000h remove kernel module
  3545.         Return: AX = status (0000h successful, else WEB error code)
  3546.         0001h set kernel ^S filter
  3547.         DL = new state (00h don't filter ^S, nonzero do filter)
  3548.         0002h get kernel data area
  3549.         Return: ES:DI -> kernel data area
  3550.         0003h display dialog box
  3551.         CL = dialog box type
  3552.             00h password
  3553.             01h E-Note received notification
  3554.             02h Novell login
  3555.             03h general notification
  3556.         DL = number of rows to display
  3557.         ES:SI -> array of far pointers to rows to be displayed
  3558.         ES:DI -> Pascal-style input buffer
  3559.         Return: AX = status (0000h successful, else error code)
  3560.         0004h kernel service events
  3561.         0005h get kernel's in-critical-section flag
  3562.         Return: ES:DI -> kernel InCriticalSection flag
  3563.         0006h schedule DOS event
  3564.         AL = directive
  3565.             00h do not ignore WEB ExtraBusy flag
  3566.             01h ignore ExtraBusy flag
  3567.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  3568.         ES:SI -> WEB AES Event Control Block (ECB) (see #2314)
  3569.         Notes:    the WEB Asynchronous Event Scheduler is similar to the
  3570.               one used by IPX; this call schedules a special ECB
  3571.               to be executed at a later time.  Unlike IPX ECBs,
  3572.               the timeout must be set explicitly by the caller
  3573.             this function also calls function 0004h
  3574.         0007h check busy
  3575.         AL = directive
  3576.             00h do not ignore WEB ExtraBusy flag
  3577.             01h ignore ExtraBusy flag
  3578.             02h (WEB4WIN) check that current Windows VM is foregrnd VM
  3579.         Return: AX = status (0000h not busy, else busy)
  3580.         0008h set keyboard intercept
  3581.         Note:    currently a NOP which returns immediately
  3582.         0009h get keyboard intercept
  3583.         Note:    currently a NOP which returns immediately
  3584.         000Ah get dialog flags
  3585.         Return: ES:DI -> kernel dialog flags (see #2315)
  3586.         000Bh get network path
  3587.         Return: ES:DI -> fully-qualified network path of file where
  3588.                 the screen is stored on Dialog calls
  3589.         000Ch kernel alternate dialog
  3590.         CL = dialog box type
  3591.             00h password
  3592.             01h E-Note received notification
  3593.             02h Novell login
  3594.             03h general notification
  3595.         DL = number of rows to display
  3596.         ES:SI -> array of far pointers to rows to be displayed
  3597.         ES:DI -> Pascal-style input buffer
  3598.         Return: AX = status (0000h successful, else error code)
  3599.         Note:    this function is identical to function 0003h except
  3600.               that it does not notify WEB4WIN of the impending
  3601.               dialog request
  3602.         000Dh get machine/operating system type
  3603.         Return: AX = machine/operating system type
  3604.                 01h IBM PC, MS-DOS
  3605.                 02h IBM PC, DOSV (Japanese)
  3606.                 03h NEC PC-9800, JDOS (Japanese)
  3607.                 04h IBM PC, Korean DBC DOS
  3608.  
  3609. Format of client debug data structure:
  3610. Offset    Size    Description    (Table 2312)
  3611.  00h    WORD    total files
  3612.  02h    WORD    files free
  3613.  04h    WORD    no files
  3614.  06h    WORD    minimum files
  3615.  08h    WORD    total FCBs
  3616.  0Ah    WORD    total safe FCBs
  3617.  0Ch    WORD    FCBs in use
  3618.  0Eh    WORD    wrong FCB
  3619.  10h    WORD    compressed
  3620.  12h    WORD    retransmits
  3621.  
  3622. Format of WIN_INSTANCE_DATA structure:
  3623. Offset    Size    Description    (Table 2313)
  3624.  00h    DWORD    real-mode pointer to data to be instanced
  3625.  04h    WORD    size of data to be instanced
  3626.  
  3627. Format of WEB AES Event Control Block:
  3628. Offset    Size    Description    (Table 2314)
  3629.  00h    DWORD    link address
  3630.  04h    WORD    ESR address
  3631.  08h    BYTE    InUse flag
  3632.  09h    BYTE    completion code
  3633.  0Ah  3 BYTEs    reserved
  3634.  0Dh    WORD    timeout
  3635.  0Fh    BYTE    IgnoreExtra flag
  3636.  10h    WORD    PSP
  3637.  12h    DWORD    DTA
  3638.  16h    WORD    AX value for DOS critical information
  3639.  18h    WORD    BX value for DOS critical information
  3640.  1Ah    WORD    CX value for DOS critical information
  3641.  1Ch    WORD    DX value for DOS critical information
  3642.  
  3643. (Table 2315)
  3644. Values for kernel dialog flags:
  3645.  01h    dialog will timeout
  3646.  02h    display stars instead of entered keystrokes
  3647. --------N-2FEEF0-----------------------------
  3648. INT 2F - WEB v4.02 - WEB GENERAL NOTIFICATION
  3649.     AX = EEF0h
  3650.     BX = notification function ID (see #2316)
  3651. Return: varies by notification function
  3652. Program: WEB is an IPX-based peer-to-peer network by Webcorp.
  3653. Note:    the notification functions are used internally by WEB modules to notify
  3654.       other modules and external programs of actions or event, and should
  3655.       never be called by an application
  3656. SeeAlso: AX=EE00h"WEB"
  3657.  
  3658. (Table 2316)
  3659. Values for WEB Notification Function ID:
  3660.  00h    node added
  3661.  01h    node deleted
  3662.  02h    dial attempt
  3663.  03h    dial failed
  3664.  04h    file close
  3665.  05h    close connection
  3666.  07h    check Windows mode
  3667.  20h    link up
  3668.  21h    link down
  3669. --------K-2FF000-----------------------------
  3670. INT 2F U - 4MAP - INSTALLATION CHECK
  3671.     AX = F000h
  3672. Return: AX = 00FFh
  3673. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3674. Note:    returns AX=00FFh for any value of AL not listed here
  3675. SeeAlso: AX=D44Dh,AX=F001h,AX=F002h
  3676. --------K-2FF001-----------------------------
  3677. INT 2F U - 4MAP - GET KEY MAPPINGS
  3678.     AX = F001h
  3679. Return: ES:BX -> key mappings
  3680. SeeAlso: AX=F000h
  3681. --------K-2FF002-----------------------------
  3682. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3683.     AX = F002h
  3684.     BL = character to insert
  3685. Return: AX = status
  3686.         0000h successful
  3687.         0001h buffer full
  3688. SeeAlso: AX=F000h,AX=F003h
  3689. --------K-2FF003-----------------------------
  3690. INT 2F U - 4MAP - INSERT CHARACTER INTO ???
  3691.     AX = F003h
  3692.     BL = character to insert
  3693. Return: AX = status
  3694.         0000h successful
  3695.         0001h buffer full
  3696. Program: 4MAP is a keybinding program for 4DOS (see AX=D44Dh) by Ho-Ping Tseng
  3697. SeeAlso: AX=F000h,AX=F002h
  3698. --------m-2FF1-------------------------------
  3699. INT 2F U - MIN-MEM v2.11 - INSTALLATION CHECK
  3700.     AH = F1h
  3701.     AL <> F1h
  3702. Return: AL = F1h if installed
  3703. Program: MIN-MEM is a shareware TSR manager by Biologic which permits up to 24
  3704.       popup TSRs to be loaded but swapped out to disk, EMS, or XMS.     One
  3705.       TSR at a time is brought back into memory at the user's request.
  3706. --------E-2FF100-----------------------------
  3707. INT 2F - DOS EXTENDER INSTALLATION CHECK
  3708.     AX = F100h
  3709. Return: AL = FFh if DOS extender present
  3710.         SI = 444Fh ("DO")
  3711.         DI = 5358h ("SX")
  3712. Note:    supported or soon to be supported by Phar Lap, Rational, Ergo, and IGC
  3713. SeeAlso: AH=A1h,AX=ED00h,AX=FBA1h/BX=0081h,INT 15/AX=BF02h
  3714. --------W-2FF200-----------------------------
  3715. INT 2F - WINX - INSTALLATION CHECK
  3716.     AX = F200h
  3717. Return: AX = 00FFh if installed
  3718. Program: WINX is a DOS/Windows utilities by Al Williams which can be used to
  3719.       launch Windows applications from a DOS Box; it was published in
  3720.       "DOS and Windows Protected Mode-Programming with DOS Extenders"
  3721.       (Addison-Wesley) and should not be confused with the Windows driver
  3722.       of the same name which is part of the DESQview/X package
  3723. --------W-2FF201-----------------------------
  3724. INT 2F - WINX - RETURN ADDRESS OF SERVER BUFFER
  3725.     AX = F201h
  3726. Return: AX = status
  3727.         FFFFh if WINX is busy processing a different request
  3728.         0000h if successful
  3729.         BX:CX = address of server buffer (see #2317)
  3730.  
  3731. Format of WINX server buffer:
  3732. Offset    Size    Description    (Table 2317)
  3733.  00h    BYTE    command/status
  3734.         00h buffer available
  3735.         01h buffer contains result
  3736.         02h change directory
  3737.         03h execute program
  3738.         FFh terminate windows portion of WINX
  3739.  01h  ? BYTEs    command (03h) or directory (02h)
  3740.   or
  3741.  01h    DWORD    result (01h)
  3742. --------W-2FF202-----------------------------
  3743. INT 2F - WINX - SET SERVER'S WORKING DIRECTORY
  3744.     AX = F202h
  3745.     BX:CX -> directory
  3746. Return: AX = status
  3747.         FFFFh if WINX is busy processing a different request
  3748.         0000h if successful
  3749. SeeAlso: AX=F200h,AX=F203h
  3750. --------W-2FF203-----------------------------
  3751. INT 2F - WINX - EXECUTE COMMAND
  3752.     AX = F203h
  3753.     BX:CX -> command
  3754. Return: AX = status
  3755.         0000h if successful
  3756.         FFFFh if WINX is busy processing a different request
  3757. SeeAlso: AX=F200h,AX=F202h
  3758. --------G-2FF400-----------------------------
  3759. INT 2F - FINDIRQ.COM - INSTALLATION CHECK
  3760.     AX = F400h
  3761. Return: AL = 01h if installed
  3762. Program: FINDIRQ is a program by Rick Knoblaugh published in the 9/28/93 issue
  3763.       of PC Magazine; when run as a TSR it can determine which IRQs are
  3764.       used only when a device is active
  3765. SeeAlso: AX=F401h
  3766. --------N-2FF401-----------------------------
  3767. INT 2F - PowerLAN - GET VERSION
  3768.     AX = F401h
  3769. Return: ES:BX -> WORD containing 100*version (in decimal)
  3770. Program: PowerLAN is by Performance Technology
  3771. --------G-2FF401CX5121-----------------------
  3772. INT 2F - FINDIRQ.COM - GET HOOKED INTERRUPTS
  3773.     AX = F401h
  3774.     CX = 5121h ('Q!')
  3775. Return: AX:DX -> hooked interrupt table (see #2318)
  3776. SeeAlso: AX=F400h
  3777.  
  3778. Format of FINDIRQ hooked interrupt table:
  3779. Offset    Size    Description    (Table 2318)
  3780.  00h    BYTE    1Ch
  3781.  01h    DWORD    FINDIRQ's INT 1C handler
  3782.  05h    DWORD    original INT 1C handler
  3783.  09h    BYTE    28h
  3784.  0Ah    DWORD    FINDIRQ's INT 28 handler
  3785.  0Eh    DWORD    original INT 28 handler
  3786.  12h    BYTE    2Fh
  3787.  13h    DWORD    FINDIRQ's INT 2F handler
  3788.  17h    DWORD    original INT 2F handler
  3789. --------d-2FF700-----------------------------
  3790. INT 2F - AUTOPARK.COM - INSTALLATION CHECK
  3791.     AX = F700h
  3792. Return: AL = state
  3793.         00h not installed
  3794.         FFh installed
  3795. Program: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  3796. --------d-2FF701-----------------------------
  3797. INT 2F - AUTOPARK.COM - SET PARKING DELAY
  3798.     AX = F701h
  3799.     BX:CX = 32-bit count of 55ms timer ticks
  3800. --------d-2FF800CX4455-----------------------
  3801. INT 2F U - SuperStor PRO 2XON.COM - INSTALLATION CHECK
  3802.     AX = F800h
  3803.     CX = 4455h ("DU")
  3804.     DL = 45h ("E")
  3805. Return: AL = FFh if installed
  3806.         ES:BX -> ASCII signature "Universal Data Exchange"
  3807. Program: SuperStor is a disk-compression program by Addstor.
  3808. Note:    returns AX=0001h if AL is not 00h or 01h
  3809. SeeAlso: AX=1001h,AX=F801h
  3810. --------d-2FF801CX4455-----------------------
  3811. INT 2F U - SuperStor PRO 2XON.COM - UNINSTALL
  3812.     AX = F801h
  3813.     CX = 4455h ("DU")
  3814.     DL = 45h ("E")
  3815.     ES:BX = return address if successful
  3816. Return: at specified address if successfully removed from memory
  3817.     else
  3818.         AL = error code
  3819.         ???
  3820. Program: SuperStor is a disk-compression program by Addstor.
  3821. Note:    returns AX=0001h if AL is not 00h or 01h
  3822. SeeAlso: AX=1001h,AX=F800h
  3823. ----------2FFA00-----------------------------
  3824. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  3825.     AX = FA00h
  3826.     BX = ??? (0408h)
  3827.     CX = ??? (001Fh)
  3828.     DX = ??? (0102h)
  3829.     SI = ??? (5ACCh)
  3830.     DI = ??? (0632h)
  3831. Return: ???
  3832. Note:    called by WinEmacs at startup
  3833. ----------2FFA00-----------------------------
  3834. INT 2F - Multiplex - ??? - INSTALLATION CHECK???
  3835.     AX = FA00h
  3836.     BX = ??? (03FCh)
  3837.     CX = ??? (003Fh)
  3838.     DX = ??? (00FFh)
  3839.     SI = ??? (5AA6h)
  3840.     DI = ??? (0620h)
  3841. Return: ???
  3842. Note:    called by Matlab at startup
  3843. --------*-2FFB-------------------------------
  3844. INT 2F - Multiplex - RESERVED BY BORLAND INTERNATIONAL
  3845.     AH = FBh
  3846. SeeAlso: AX=FB42h/BX=0001h
  3847. --------f-2FFB-------------------------------
  3848. INT 2F U - Conner Backup Exec AUTORES - API
  3849.     AH = FBh
  3850.     BL = function number (00h-07h)
  3851.     ???
  3852. Return: ???
  3853. Program: AUTORES is a resident program launcher for unattended backups
  3854. --------a-2FFB00-----------------------------
  3855. INT 2F U - AutoBraille v1.1A - INSTALLATION CHECK
  3856.     AX = FB00h
  3857. Return: AX = 00FFh if installed
  3858. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3859. SeeAlso: INT 10/AX=3800h,INT 14/AX=F0F1h
  3860. --------U-2FFB00-----------------------------
  3861. INT 2F U - Jot-It! v1.50 - INSTALLATION CHECK
  3862.     AX = FB00h
  3863. Return: AX = FFFFh if installed
  3864.         BX = version (BCD, BH=major, BL=minor)
  3865. SeeAlso: AX=FB03h"Jot-It",AX=FB01h"Jot-It"
  3866. --------a-2FFB01-----------------------------
  3867. INT 2F U - AutoBraille v1.1A - ???
  3868.     AX = FB01h
  3869.     ???
  3870. Return: ???
  3871. --------U-2FFB01-----------------------------
  3872. INT 2F U - Jot-It! v1.50 - GET USER NAME
  3873.     AX = FB01h
  3874. Return: DX:BX -> ASCIZ user name
  3875. SeeAlso: AX=FB02h"Jot-It"
  3876. --------a-2FFB02-----------------------------
  3877. INT 2F U - AutoBraille v1.1A - ???
  3878.     AX = FB02h
  3879. Return: AH = ???
  3880.     AL = ???
  3881. --------U-2FFB02-----------------------------
  3882. INT 2F U - Jot-It! v1.50 - GET MESSAGE DIRECTORY
  3883.     AX = FB02h
  3884. Return: DX:BX -> ASCIZ name of directory in which messages are stored
  3885. SeeAlso: AX=FB01h"Jot-It"
  3886. --------a-2FFB03-----------------------------
  3887. INT 2F U - AutoBraille v1.1A - GET NEXT ???
  3888.     AX = FB03h
  3889. Return: AX = ???
  3890. --------U-2FFB03-----------------------------
  3891. INT 2F U - Jot-It! v1.50 - UNINSTALL
  3892.     AX = FB03h
  3893. Return: resident code removed from memory
  3894. Note:    CAUTION: NO checks are performed to ensure that the interrupt vectors
  3895.       being unhooked (08h,09h,28h,2Fh) actually point at the Jot-It! code
  3896. SeeAlso: AX=FB00h"Jot-It"
  3897. --------a-2FFB-------------------------------
  3898. INT 2F U - AutoBraille v1.1A - SET ???
  3899.     AH = FBh
  3900.     AL = 04h-08h
  3901. Return: AX = 0000h
  3902. --------a-2FFB-------------------------------
  3903. INT 2F U - AutoBraille v1.1A - SET ???
  3904.     AH = FBh
  3905.     AL = 09h-0Fh (???, 0Eh = COM1, 0Fh = COM2)
  3906. Return: ???
  3907. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3908. --------a-2FFB-------------------------------
  3909. INT 2F U - AutoBraille v1.1A - SET ???
  3910.     AH = FBh
  3911.     AL = 10h-1Fh
  3912.     ???
  3913. Return: ???
  3914. --------a-2FFB20-----------------------------
  3915. INT 2F U - AutoBraille v1.1A - SET ??? FLAGS
  3916.     AX = FB20h
  3917.     BL = flags to set
  3918. SeeAlso: AX=FB21h"AutoBraille"
  3919. --------a-2FFB21-----------------------------
  3920. INT 2F U - AutoBraille v1.1A - CLEAR ??? FLAGS
  3921.     AX = FB21h
  3922.     BL = flags to clear
  3923. SeeAlso: AX=FB20h"AutoBraille"
  3924. --------a-2FFB22-----------------------------
  3925. INT 2F U - AutoBraille v1.1A - SET ???
  3926.     AX = FB22h
  3927.     BL = ???
  3928. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3929. --------a-2FFB28-----------------------------
  3930. INT 2F U - AutoBraille v1.1A - ???
  3931.     AX = FB28h
  3932.     BX = ???
  3933.     ???
  3934. Return: ???
  3935. SeeAlso: AX=FB29h"AutoBraille"
  3936. --------a-2FFB29-----------------------------
  3937. INT 2F U - AutoBraille v1.1A - ???
  3938.     AX = FB29h
  3939.     BX = ???
  3940.     ???
  3941. Return: ???
  3942. SeeAlso: AX=FB28h"AutoBraille"
  3943. --------a-2FFB-------------------------------
  3944. INT 2F U - AutoBraille v1.1A - SET ???
  3945.     AH = FBh
  3946.     AL = 2Bh-34h
  3947.     BX = ???
  3948. --------a-2FFB35-----------------------------
  3949. INT 2F U - AutoBraille v1.1A - SET ???
  3950.     AX = FB35h
  3951.     BL = ???
  3952. --------a-2FFB36-----------------------------
  3953. INT 2F U - AutoBraille v1.1A - SET ???
  3954.     AX = FB36h
  3955.     BL = ???
  3956. --------a-2FFB37-----------------------------
  3957. INT 2F U - AutoBraille v1.1A - SET ???
  3958.     AX = FB37h
  3959.     BL = ???
  3960. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  3961. --------E-2FFB42BX0001-----------------------
  3962. INT 2F PU - Borland C++ DPMILOAD.EXE - INSTALLATION CHECK???
  3963.     AX = FB42h
  3964.     BX = 0001h
  3965. Return: AX = version number??? (AL=major, AH=minor)
  3966.     CX = next-selector increment
  3967. ---BC2.0---
  3968.     ES:BX -> 80-byte buffer for ???
  3969.     DX = DPMI version
  3970. ---BC3.0---
  3971.     BX = ??? (0000h)
  3972.     DX = ???
  3973.     ES:SI -> list of valid selectors ???
  3974. Notes:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  3975.       as version 1.000, while the version distributed with BC++ 3.0
  3976.       identifies itself as version 1.0; the former is 10864 bytes, the
  3977.       latter 22180 bytes.  The BC2.0 version is a DPMI loader, while
  3978.       the BC3.0 version also adds a DPMI host and DOS extender
  3979.     the BC++ 2.0 version displays an error message if called with BX
  3980.       values other than 0001h-0008h
  3981. SeeAlso: AX=1687h,AX=FB42h/BX=1001h,AX=FB43h
  3982. --------E-2FFB42BX0002-----------------------
  3983. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ALLOCATE MEMORY
  3984.     AX = FB42h
  3985.     BX = 0002h
  3986.     CX = size in bytes
  3987.     DX = bit flags
  3988.         bit 2: set to allocate DOS memory, clear for DPMI memory
  3989.     SI = selector of descriptor to be modified to access allocated memory
  3990.     DI = selector of a second descriptor to be modified
  3991. Return: AX = ??? or 0000h on error
  3992.     CX:DX = linear base address of DPMI memory block
  3993.     SI:DI = handle for DPMI memory block or FFFFh:FFFFh
  3994.     ???
  3995. Note:    two segment descriptors may be set if a code and an aliased data
  3996.       segment are required; if only one descriptor is needed, SI should
  3997.       equal DI on entry
  3998. BUG:    when allocating DOS memory, the code computes the linear address by
  3999.       multiplying the segment number by 4 rather than shifting by 4
  4000. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  4001. --------E-2FFB42BX0002-----------------------
  4002. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ALLOCATE MEMORY
  4003.     AX = FB42h
  4004.     BX = 0002h
  4005.     ES:SI -> memory block info (see #2319)
  4006. Return: ???
  4007. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  4008.       as version 1.000, while the version distributed with BC++ 3.0
  4009.       identifies itself as version 1.0; the former is 10864 bytes, the
  4010.       latter 22180 bytes.
  4011. SeeAlso: AX=FB42h/BX=0003h,AX=FB42h/BX=0008h,INT 31/AX=0501h
  4012.  
  4013. Format of DPMILOAD memory block info:
  4014. Offset    Size    Description    (Table 2319)
  4015.  00h    WORD    flags (see #2320)
  4016.  02h    DWORD    block size in bytes
  4017. ---DPMI memory block---
  4018.  06h    DWORD    DPMI memory block handle
  4019. ---DOS memory block---
  4020.  06h    WORD    real-mode segment of memory block
  4021.  08h    WORD    selector of memory block
  4022. ---
  4023.  0Ah    DWORD    linear address of memory
  4024.  0Eh    WORD    memory operation error code
  4025.         0008h no more free LDT descriptors
  4026. ---if flags bit 0 clear---
  4027.  10h    WORD    code segment selector for memory block or 0000h or FFFFh
  4028.  12h    WORD    data alias selector for memory block or 0000h or FFFFh
  4029. ---if flags bit 0 set---
  4030.  10h    WORD    data segment selector for memory block or 0000h or FFFFh
  4031.  12h    WORD    unused???
  4032.  
  4033. Bitfields for DPMILOAD memory block flags:
  4034. Bit(s)    Description    (Table 2320)
  4035.  0    set if data segment rather than code segment
  4036.  1    information valid
  4037.  2    set if DOS memory block rather than DPMI memory block
  4038.  4    ???
  4039.  15    set if no LDT selectors for memory block???
  4040. SeeAlso: #2319
  4041. --------E-2FFB42BX0003-----------------------
  4042. INT 2F PU - Borland C++ DPMILOAD.EXE - GET AVAILABLE MEMORY
  4043.     AX = FB42h
  4044.     BX = 0003h
  4045. Return: DX:AX = size of largest free block in paragraphs
  4046.         0000h:0000h on error (BC3.0 version only)
  4047. Note:    AX and DX are destroyed on error, but no other error indicator is
  4048.       returned, under the BC++ 2.0 version of DPMILOAD
  4049. SeeAlso: AX=FB42h/BX=0002h
  4050. --------E-2FFB42BX0004-----------------------
  4051. INT 2F PU - Borland C++ DPMILOAD.EXE - LOAD PROTECTED-MODE EXECUTABLE???
  4052.     AX = FB42h
  4053.     BX = 0004h
  4054.     DS:DX -> ASCIZ filename of protected-mode executable
  4055. Return: CX = selector of ??? or 0000h
  4056. ---BC3.0---
  4057.     DX = status (0000h,FFF4h,others???) (see #2321)
  4058. Note:    the filename may also be terminated by a CR rather than a NUL under the
  4059.       BC++ 3.0 version of DPMILOAD
  4060.  
  4061. (Table 2321)
  4062. Values for DPMILOAD function status:
  4063.  0000h    successful
  4064.  0001h    ??? failure
  4065.  0002h    invalid selector
  4066.  0004h    unknown error
  4067.  0008h    no more LDT descriptors available???
  4068.  FFDEh    unable to set descriptor
  4069.  FFDFh    unable to get segment base address
  4070.  FFE0h    ???
  4071.  FFF2h    invalid parameter value
  4072.  FFF4h    component of filename too long (name not in 8.3 format)
  4073.  FFF5h    pathname too long (>79 chars)
  4074.  FFF6h    ???
  4075.  FFF8h    ???
  4076.  FFF9h    index out of range
  4077.  FFFAh    ???
  4078.  FFFCh    invalid access to code segment???
  4079.  FFFEh    ???
  4080.  FFFFh    general error
  4081. --------E-2FFB42BX0005-----------------------
  4082. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NAME
  4083.     AX = FB42h
  4084.     BX = 0005h
  4085.     CX = selector of DPMILOAD data (see #2322)
  4086.     DS:DX -> ASCIZ or CR-terminated name of ??? (case ignored)
  4087. Return: DX = status (see #2321)
  4088.         0000h successful
  4089.         AX:BX -> ??? FAR function (called with two words on top of stk)
  4090.         else
  4091.         BX destroyed
  4092. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=000Eh
  4093.  
  4094. Format of DPMILOAD data:
  4095. Offset    Size    Description    (Table 2322)
  4096.  00h 12 BYTEs    ???
  4097.  0Ch    WORD    ??? bit flags
  4098.  0Eh 14 BYTEs    ???
  4099.  1Ch    WORD    number of memory control records (see #2325)
  4100.  1Eh 25 BYTEs    ???
  4101.  37h    BYTE    ??? bit flags
  4102.         bit 4: data valid???
  4103.  38h  4 BYTEs    ???
  4104.  3Ch    WORD    ???
  4105.  3Eh 12 BYTEs    ???
  4106.  46h    BYTE    ??? counter
  4107.  47h    BYTE    ???
  4108.  48h    BYTE    ???
  4109.  49h    BYTE    ???
  4110.  4Ah    WORD    ???
  4111.  4Ch  2 BYTEs    ???
  4112.  4Eh    WORD    offset of array of 64-byte memory control records
  4113.  52h    WORD    offset of name list (see #2323)
  4114.  54h  4 BYTEs    ???
  4115.  58h    WORD    offset of array of 6-byte objects (see #2324)
  4116.  5Ah  8 BYTEs    ???
  4117.  62h  9 BYTEs    ASCIZ name for ???
  4118.  6Bh  9 BYTEs    ASCIZ name for ???
  4119.     ???
  4120.  
  4121. Format of name list entry [array]:
  4122. Offset    Size    Description    (Table 2323)
  4123.  00h    BYTE    length of name (00h if end of array)
  4124.  01h  N BYTEs    name
  4125.  N+1    WORD    1-based index into array of unknown 6-byte objects
  4126.  
  4127. Format of 6-byte objects:
  4128. Offset    Size    Description    (Table 2324)
  4129.  00h    BYTE    ???
  4130.  01h    BYTE    ???
  4131.  02h    BYTE    ???
  4132.  03h    BYTE    1-based index of memory control record
  4133.  04h    WORD    ???
  4134.  
  4135. Format of memory control record:
  4136. Offset    Size    Description    (Table 2325)
  4137.  00h 20 BYTEs    memory block info (see #2319)
  4138.  14h  6 BYTEs    ???
  4139.  1Ah    BYTE    ???
  4140.  1Bh  2 BYTEs    ???
  4141.  1Dh    BYTE    ??? bit flags
  4142.  1Eh 14 BYTEs    ???
  4143.  2Ch    DWORD    pointer to ??? memory control record or 0000h:0000h
  4144.  30h    DWORD    pointer to ??? memory control record or 0000h:0000h
  4145.  34h    DWORD    pointer to next??? memory control record or 0000h:0000h
  4146.  38h    DWORD    pointer to prev??? memory control record or 0000h:0000h
  4147.  3Ch  4 BYTEs    ???
  4148. Note:    the pointers at offsets 2Ch and 30h form a doubly-linked list, as do
  4149.       the pointers at offsets 34h and 38h
  4150. --------E-2FFB42BX0006-----------------------
  4151. INT 2F PU - Borland C++ DPMILOAD.EXE - GET ADDRESS OF ??? BY NUMBER
  4152.     AX = FB42h
  4153.     BX = 0006h
  4154.     CX = selector of DPMILOAD data (see #2322)
  4155.     DX = 1-based index into array of ??? 6-byte objects
  4156. Return: DX = status (see #2321)
  4157.         0000h successful
  4158.         AX:BX -> ??? FAR function (called with two words on top of stk)
  4159.         else
  4160.         BX destroyed
  4161. SeeAlso: AX=FB42h/BX=0005h,AX=FB42h/BX=000Eh
  4162. --------E-2FFB42BX0007-----------------------
  4163. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - ???
  4164.     AX = FB42h
  4165.     BX = 0007h
  4166.     CX = selector of ???
  4167. Return: ???
  4168. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  4169.       as version 1.000, while the version distributed with BC++ 3.0
  4170.       identifies itself as version 1.0; the former is 10864 bytes, the
  4171.       latter 22180 bytes.
  4172. --------E-2FFB42BX0007-----------------------
  4173. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4174.     AX = FB42h
  4175.     BX = 0007h
  4176.     CX = selector of DPMILOAD data (see #2322)
  4177.     ???
  4178. Return: DX = status (see #2321)
  4179.         0000h successful
  4180.         AX = ???
  4181. --------E-2FFB42BX0008-----------------------
  4182. INT 2F PU - Borland C++ 2.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  4183.     AX = FB42h
  4184.     BX = 0008h
  4185.     CX = bit flags
  4186.         bit 2: set if DPMI memory, clear if DOS memory
  4187.     DX = selector of DOS memory block
  4188.     SI:DI = handle of DPMI memory block
  4189. Return: DX = 0000h on error, unchanged if succcessful
  4190. Note:    The version of DPMILOAD distributed with BC++ v2.0 identifies itself
  4191.       as version 1.000, while the version distributed with BC++ 3.0
  4192.       identifies itself as version 1.0; the former is 10864 bytes, the
  4193.       latter 22180 bytes.
  4194. SeeAlso: AX=FB42h/BX=0002h
  4195. --------E-2FFB42BX0008-----------------------
  4196. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE MEMORY BLOCK
  4197.     AX = FB42h
  4198.     BX = 0008h
  4199.     ES:SI -> memory block info (see #2319)
  4200. Return: ???
  4201. SeeAlso: AX=FB42h/BX=0009h
  4202. --------E-2FFB42BX0009-----------------------
  4203. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - RESIZE MEMORY BLOCK
  4204.     AX = FB42h
  4205.     BX = 0009h
  4206.     ES:SI -> memory block info (see #2319)
  4207.     ???
  4208. Return: ???
  4209. SeeAlso: AX=FB42h/BX=0008h"3.0"
  4210. --------E-2FFB42BX000A-----------------------
  4211. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INIT DPMI HOST AND SPAWN SUBSHELL
  4212.     AX = FB42h
  4213.     BX = 000Ah
  4214.     CX = 0001h
  4215.     DX = ???
  4216.     SI = ???
  4217. Return: after user exits subshell
  4218. Notes:    this call is used by DPMIRES; unlike most of the DPMILOAD calls, this
  4219.       function is not available in protected mode.
  4220.     the BC2.0 version of DPMILOAD is purely a DPMI loader, while the BC3.0
  4221.       version also adds a DPMI host and DOS extender.
  4222. SeeAlso: AX=FB42h/BX=0004h,AX=FB42h/BX=0015h
  4223. --------E-2FFB42BX000B-----------------------
  4224. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - UNUSED
  4225.     AX = FB42h
  4226.     BX = 000Bh
  4227. --------E-2FFB42BX000C-----------------------
  4228. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - FREE DESCRIPTORS FOR MEMORY BLOCK???
  4229.     AX = FB42h
  4230.     BX = 000Ch
  4231.     ES:SI -> memory block info ??? (see #2319)
  4232. Return: DX = status???
  4233. SeeAlso: AX=FB42h/BX=000Fh
  4234. --------E-2FFB42BX000D-----------------------
  4235. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SIMULATE REAL MODE INTERRUPT
  4236.     AX = FB42h
  4237.     BX = 000Dh
  4238.     CX = number of words to copy from protected-mode to real mode stack
  4239.     DL = interrupt number
  4240.     DH = flags
  4241.         bit 0: reset the interrupt controller and A20 line
  4242.     ES:DI -> real-mode call structure (see #2339 at INT 31/AX=0300h)
  4243. Return: CX = status
  4244.         0000h successful
  4245.         0001h failed
  4246. SeeAlso: INT 31/AX=0300h
  4247. --------E-2FFB42BX000E-----------------------
  4248. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  4249.     AX = FB42h
  4250.     BX = 000Eh
  4251.     DS:DX -> ASCIZ or CR-terminated name of ???
  4252. Return: CX = selector of DPMILOAD data (see #2322) corresponding to name,
  4253.           0000h on error
  4254. SeeAlso: AX=FB42h/BX=0006h,AX=FB42h/BX=001Fh
  4255. --------E-2FFB42BX000F-----------------------
  4256. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - REALLOCATE LDT DESCRPS TO MEMBLK???
  4257.     AX = FB42h
  4258.     BX = 000Fh
  4259.     ES:SI -> memory block info (see #2319)
  4260. Return: ???
  4261. SeeAlso: AX=FB42h/BX=000Ch
  4262. --------E-2FFB42BX0010-----------------------
  4263. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SEGMENT TO SELECTOR
  4264.     AX = FB42h
  4265.     BX = 0010h
  4266.     DX = segment number
  4267. Return: CX = status (0000h,0008h) (see also AX=FB42h/BX=0004h)
  4268.         0000h successful
  4269.         DX = selector number for descriptor
  4270.         0008h failed
  4271. SeeAlso: AX=FB42h/BX=0023h
  4272. --------E-2FFB42BX0011-----------------------
  4273. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4274.     AX = FB42h
  4275.     BX = 0011h
  4276.     CX = selector of DPMILOAD data (see #2322)
  4277.     ???
  4278. Return: DX = status (0000h,0002h,FFFEh) (see also #2321)
  4279.         0000h successful
  4280.         AX:BX -> ??? name
  4281.         FFFEh ??? error
  4282. --------E-2FFB42BX0012-----------------------
  4283. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4284.     AX = FB42h
  4285.     BX = 0012h
  4286.     CX = selector for ???
  4287. Return: CX = selector for ???
  4288. --------E-2FFB42BX0013-----------------------
  4289. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4290.     AX = FB42h
  4291.     BX = 0013h
  4292.     CX = selector of DPMILOAD data (see #2322)
  4293.     DX = 1-based index of ???
  4294. Return: CX = status (0000h,0002h,FFF9h) (see also #2321)
  4295.         0000h successful
  4296.         BX = ??? or 0000h
  4297.         FFF9h ??? error
  4298. --------E-2FFB42BX0014-----------------------
  4299. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - INSTALLATION CHECK
  4300.     AX = FB42h
  4301.     BX = 0014h
  4302.     CX = 0001h
  4303. Return: BX = 0000h if installed
  4304. Note:    unlike most of the DPMILOAD functions, this call is available only in
  4305.       real or V86 mode
  4306. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=000Ah
  4307. --------E-2FFB42BX0015-----------------------
  4308. INT 2F RU - Borland C++ 3.0 DPMILOAD.EXE - UNINSTALL
  4309.     AX = FB42h
  4310.     BX = 0015h
  4311.     CX = 0001h
  4312. Return: ???
  4313. Note:    unlike most of the DPMILOAD functions, this call is available only in
  4314.       real or V86 mode
  4315. SeeAlso: AX=FB42h/BX=000Ah
  4316. --------E-2FFB42BX0016-----------------------
  4317. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4318.     AX = FB42h
  4319.     BX = 0016h
  4320.     CX = selector of DPMILOAD data (see #2322)
  4321. Return: DX = status (see also AX=FB42h/BX=0004h)
  4322.         0000h successful
  4323.         CX = ???
  4324. --------E-2FFB42BX0017-----------------------
  4325. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4326.     AX = FB42h
  4327.     BX = 0017h
  4328.     CX = ???
  4329.     DX = ???
  4330.     ???
  4331. Return: DX = status (0000h,0001h) (see #2321)
  4332. --------E-2FFB42BX0018-----------------------
  4333. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET ???
  4334.     AX = FB42h
  4335.     BX = 0018h
  4336.     CX = ???
  4337. --------E-2FFB42BX0019-----------------------
  4338. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4339.     AX = FB42h
  4340.     BX = 0019h
  4341.     CX = selector for ???
  4342.     ???
  4343. Return: DX = status (see also AX=FB42h/BX=0004h)
  4344.         0000h successful
  4345.         CX = selector for ???
  4346. --------E-2FFB42BX001A-----------------------
  4347. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4348.     AX = FB42h
  4349.     BX = 001Ah
  4350.     CX = selector for ???
  4351.     ???
  4352. Return: DX = status (see also AX=FB42h/BX=0004h)
  4353.         0000h successful
  4354.         0004h failed
  4355.     CX:BX -> ???
  4356. --------E-2FFB42BX001B-----------------------
  4357. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4358.     AX = FB42h
  4359.     BX = 001Bh
  4360.     CX = selector of DPMILOAD data (see #2322)
  4361.     DX = offset of ???
  4362. Return: DX = status (0000h,0002h) (see also #2321)
  4363.         0000h successful
  4364.         BX = selector for ???
  4365.         CX = selector for ???
  4366. --------E-2FFB42BX001C-----------------------
  4367. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4368.     AX = FB42h
  4369.     BX = 001Ch
  4370.     ES = selector for DPMILOAD data (see #2322)
  4371.     CX = 1-based index of ???
  4372.     DX = 1-based index of ???
  4373. Return: DX = status (0000h,0002h,FFF9h) (see #2321)
  4374. --------E-2FFB42BX001D-----------------------
  4375. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4376.     AX = FB42h
  4377.     BX = 001Dh
  4378. Return: CX:DX = ???
  4379. --------E-2FFB42BX001E-----------------------
  4380. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4381.     AX = FB42h
  4382.     BX = 001Eh
  4383.     CX = ???
  4384.     ???
  4385. Return: DX = status (see also AX=FB42h/BX=0004h)
  4386.         0000h successful
  4387.         FFF7h ??? error
  4388.     CX:BX -> ???
  4389. --------E-2FFB42BX001F-----------------------
  4390. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ADDRESS OF ???
  4391.     AX = FB42h
  4392.     BX = 001Fh
  4393.     DS:DX -> 8-character name of ???
  4394.     ???
  4395. Return: CX = selector of DPMILOAD data (see #2322) for ???
  4396.         0000h on error
  4397. SeeAlso: AX=FB42h/BX=000Eh
  4398. --------E-2FFB42BX0020-----------------------
  4399. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION???
  4400.     AX = FB42h
  4401.     BX = 0020h
  4402. Return: DX = ??? (always 0000h)
  4403. --------E-2FFB42BX0021-----------------------
  4404. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROCESSOR EXCEPTION HANDLER VECT
  4405.     AX = FB42h
  4406.     BX = 0021h
  4407.     CL = exception number (00h-1Fh)
  4408. Return: DX = status (see also AX=FB42h/BX=0004h)
  4409.         0000h successful
  4410.         AX:BX = selector:offset of handler
  4411.         FFF2h unable to get exception handler vector
  4412. SeeAlso: AX=FB42h/BX=0022h,AX=FB42h/BX=0024h,INT 31/AX=0202h
  4413. --------E-2FFB42BX0022-----------------------
  4414. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROCESSOR EXCEPTION HANDLER VECT
  4415.     AX = FB42h
  4416.     BX = 0022h
  4417.     CL = exception number (00h-1Fh)
  4418.     SI:DX = selector:offset of new handler
  4419. Return: DX = status (0000h,0004h,FFF2h) (see #2321)
  4420. SeeAlso: AX=FB42h/BX=0021h,AX=FB42h/BX=0025h,INT 31/AX=0203h
  4421. --------E-2FFB42BX0023-----------------------
  4422. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - CONVERT SELECTOR TO SEGMENT NUMBER
  4423.     AX = FB42h
  4424.     BX = 0023h
  4425.     CX = selector
  4426. Return: DX = status (see also AX=FB42h/BX=0004h)
  4427.         0000h successful
  4428.         CX = real-mode segment number
  4429.         FFF2h descriptor has invalid base address for real-mode segment
  4430. SeeAlso: AX=FB42h/BX=0010h
  4431. --------E-2FFB42BX0024-----------------------
  4432. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET PROTECTED-MODE INTERRUPT VECTOR
  4433.     AX = FB42h
  4434.     BX = 0024h
  4435.     CL = interrupt number
  4436. Return: DX = status (0000h) (see also AX=FB42h/BX=0004h)
  4437.     AX:BX = selector:offset of handler
  4438. SeeAlso: AX=FB42h/BX=0025h,INT 31/AX=0204h
  4439. --------E-2FFB42BX0025-----------------------
  4440. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - SET PROTECTED-MODE INTERRUPT VECTOR
  4441.     AX = FB42h
  4442.     BX = 0025h
  4443.     CL = interrupt number
  4444.     SI:DX = selector:offset of new handler
  4445. Return: DX = status (0000h,0004h,FFF2h) (see #2321)
  4446. SeeAlso: AX=FB42h/BX=0024h,INT 31/AX=0205h
  4447. --------E-2FFB42BX0026-----------------------
  4448. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - ???
  4449.     AX = FB42h
  4450.     BX = 0026h
  4451.     CX = selector of DPMILOAD data (see #2322)
  4452.     DX = 1-based index of ???
  4453.     ???
  4454. Return: DX = status (0000h,0002h,FFF9h) (see #2321)
  4455.         0000h successful
  4456.         BX = offset of ??? within data structure
  4457. --------E-2FFB42BX0027-----------------------
  4458. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - GET ???
  4459.     AX = FB42h
  4460.     BX = 0027h
  4461.     CX = selector of DPMILOAD data (see #2322)
  4462.     DX = offset of ???
  4463. Return: DX = status (see also AX=FB42h/BX=0004h)
  4464.         0000h successful
  4465.         BX = ???
  4466. --------E-2FFB42BX0080-----------------------
  4467. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  4468.     AX = FB42h
  4469.     BX = 0080h
  4470.     ???
  4471. Return: AX = ???
  4472.     ???
  4473. --------E-2FFB42BX0081-----------------------
  4474. INT 2F U - ??? - CALLED BY Borland C++ 3.0 DPMILOAD.EXE
  4475.     AX = FB42h
  4476.     BX = 0081h
  4477.     ???
  4478. Return: AX = ???
  4479.     ???
  4480. --------E-2FFB42BX1001-----------------------
  4481. INT 2F U - Borland RTM.EXE 1.0 - INSTALLATION CHECK???
  4482.     AX = FB42h
  4483.     BX = 1001h
  4484. Return: BX = 0000h
  4485. SeeAlso: AX=FB42h/BX=0001h,AX=FB42h/BX=1002h,AX=FB42h/BX=1003h
  4486. --------E-2FFB42BX1002-----------------------
  4487. INT 2F U - Borland RTM.EXE 1.0 - ???
  4488.     AX = FB42h
  4489.     BX = 1002h
  4490.     ???
  4491. Return: ???
  4492. SeeAlso: AX=FB42h/BX=1001h
  4493. --------E-2FFB42BX1003-----------------------
  4494. INT 2F U - Borland RTM.EXE 1.0 - ???
  4495.     AX = FB42h
  4496.     BX = 1003h
  4497.     ???
  4498. Return: ???
  4499. SeeAlso: AX=FB42h/BX=1001h
  4500. --------E-2FFB43-----------------------------
  4501. INT 2F PU - Borland C++ 3.0 DPMILOAD.EXE - NULL FUNCTION
  4502.     AX = FB43h
  4503.     BX = subfunction (at least 0000h-000Eh)
  4504. Notes:    this function is only present in protected mode; it does nothing but
  4505.       an immediate IRET
  4506.     DPMILOAD.EXE itself calls various subfunctions:
  4507.         subfunction 0004h is called with CX=selector of ???, DI=selector
  4508.           of DPMILOAD data
  4509.         subfunction 0008h is called with CX=selector of DPMILOAD data
  4510. SeeAlso: AX=FB42h/BX=0001h
  4511. --------G-2FFB43BX0100-----------------------
  4512. INT 2F PU - Borland TDX - INSTALLATION CHECK
  4513.     AX = FB43h
  4514.     BX = 0100h
  4515. Return: BX = FB43h if loaded
  4516. Program: TDX is Borland's Turbo Debugger variant for DPMI programs
  4517. Note:    Borland Pascal 7 DPMI programs use this call to check whether they
  4518.       should install their own stack and general protection exception
  4519.       handlers, or allow TDX to handle those exceptions
  4520. --------a-2FFB64-----------------------------
  4521. INT 2F U - AutoBraille v1.1A - GET ???
  4522.     AX = FB64h
  4523. Return: AX = ??? (0006h seen)
  4524. Program: AutoBraille is a shareware text-to-braille converter by KANSYS, Inc.
  4525. --------E-2FFBA1BX0081-----------------------
  4526. INT 2F U - TKERNEL (Borland DOS extender) - INSTALLATION CHECK
  4527.     AX = FBA1h
  4528.     BX = 0081h
  4529.     ES:DI -> 16-byte buffer
  4530. Return: if installed, first four bytes of ES:DI buffer are "IABH"
  4531. Program: TKERNEL is a licensed version of AI Architects/Ergo's OS/x86.
  4532. Note:    TKERNEL was present only in Borland C++ 2.0; with version 3.0, the DOS
  4533.       extender was moved into DPMILOAD.
  4534. SeeAlso: AH=A1h,AX=F100h,AX=FBA1h/BX=0082h,AX=FBA1h/BX=0084h,INT 15/AX=BF02h
  4535. SeeAlso: INT 21/AX=4403h"TKERNEL"
  4536. --------E-2FFBA1BX0082-----------------------
  4537. INT 2F U - TKERNEL (Borland DOS extender) - GET ENTRY POINT
  4538.     AX = FBA1h
  4539.     BX = 0082h
  4540.     ES:DI -> response buffer (see #2326)
  4541. Return: ES:DI buffer filled
  4542. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4543.  
  4544. Format of TKERNEL response buffer:
  4545. Offset    Size    Description    (Table 2326)
  4546.  00h  4 BYTEs    signature "IABH"
  4547.  04h    DWORD    pointer to FAR extender entry point (see #2327)
  4548.  
  4549. (Table 2327)
  4550. Call TKERNEL entry point with:
  4551.     AX = function number
  4552.         0000h initialize???
  4553.         STACK:    WORD  ???
  4554.         Return: AX = status???
  4555.             STACK unchanged
  4556.         0001h get version???
  4557.         Return: AX = 0200h for v2.0.34
  4558.         0002h get ???
  4559.         Return: AX = ??? (011Eh or 0182h seen)
  4560.         0003h load protected-mode executable
  4561.         STACK:    DWORD -> ASCIZ filename of executable
  4562.             DWORD    ???
  4563.             DWORD -> program arguments (counted string plus CR)
  4564.             DWORD -> environment for protected-mode executable
  4565.                 (terminated with two consecutive NULs)
  4566.             DWORD -> WORD buffer for ???
  4567.         Return: AX = status???
  4568.             STACK unchanged
  4569.         0004h get descriptor
  4570.         STACK:    WORD    selector for which to get descriptor
  4571.             WORD    segment number (when running in real mode)
  4572.             DWORD -> buffer for descriptor
  4573.         Return: CF clear if successful
  4574.                 buffer filled
  4575.             CF set on error
  4576.                 AX destroyed???
  4577.             STACK unchanged
  4578.         0005h ???
  4579.         STACK:    WORD    selector for ???
  4580.             WORD    subfunction number???
  4581.                 0000h run previously-loaded program???
  4582.                 0001h ??? (similar to 0000h)
  4583.                 0002h
  4584.                 0003h
  4585.                 0005h ??? (similar to 0000h and 0001h)
  4586.         Return: AX = status???
  4587.             STACK unchanged
  4588.         0006h ???
  4589.         STACK:    WORD ???
  4590.             DWORD -> WORD (call) max iterations of ???
  4591.                       (ret) remaining iterations
  4592.         Return: AX = ???
  4593.             STACK unchanged
  4594.         0007h unused
  4595.         Return: AX = 0001h
  4596.         0008h unused
  4597.         Return: AX = 0001h
  4598.         0009h copy protected-mode memory into conventional memory
  4599.         STACK:    WORD    selector for source segment
  4600.             WORD    segment of source if in real mode???
  4601.             DWORD    offset of source
  4602.             WORD    number of bytes to copy
  4603.             DWORD -> low-memory destination
  4604.         Return: AX = status
  4605.             STACK unchanged
  4606.         000Ah copy conventional memory into protected-mode memory
  4607.         STACK:    WORD    selector for destination segment
  4608.             WORD    segment of destination if in real mode???
  4609.             DWORD    offset of destination
  4610.             WORD    number of bytes to copy
  4611.             DWORD -> low-memory source
  4612.         Return: AX = status
  4613.             STACK unchanged
  4614.         000Bh get ??? pointers
  4615.         STACK:    WORD desired pointer
  4616.                 0000h get ???
  4617.                 0002h get protected-mode CR3
  4618.                 0003h get 4K page table buffer pointer
  4619.                 else Return: DX:AX = FFFFh:FFFFh
  4620.         Return: DX:AX = requested pointer
  4621.             STACK unchanged
  4622.         000Ch set ??? pointers
  4623.         STACK:    WORD desired pointer
  4624.                 0000h set ???
  4625.                 0002h set protected-mode CR3
  4626.                 0003h set 4K page table buffer pointer
  4627.                 else ignore
  4628.             DWORD new value for pointer
  4629.         Return: STACK unchanged
  4630.         000Dh get ??? pointers
  4631.         STACK:    WORD desired pointer
  4632.                 0000h get ???
  4633.                 0001h get ???
  4634.                 0002h get ???
  4635.                 0003h get ???
  4636.                 0004h get ???
  4637.                 0005h get ???
  4638.                 0006h get ???
  4639.                 0007h get ???
  4640.                 else Return: DX:AX = FFFFh:FFFFh
  4641.         Return: DX:AX = desired pointer
  4642.             STACK unchanged
  4643.         000Eh set ??? pointer
  4644.         STACK:    WORD desired pointer
  4645.                 0000h set ???
  4646.                 0001h set ???
  4647.                 0002h set ???
  4648.                 0003h set ???
  4649.                 0004h set ???
  4650.                 0005h set ???
  4651.                 0006h set ???
  4652.                 0007h set ???
  4653.                 else Return: DX:AX = FFFFh:FFFFh
  4654.         Return: STACK unchanged
  4655.         000Fh get ???
  4656.         Return: AX = ??? (seen 0008h)
  4657.         0010h get ???
  4658.         Return: AX = ???
  4659.         0011h determine whether selector is valid
  4660.         STACK:    WORD    possible selector
  4661.         Return: AX = selector or 0000h if invalid
  4662.             STACK unchanged
  4663.         0012h get physical address
  4664.         STACK:    WORD    selector for desired segment
  4665.             WORD    segment number if in real mode
  4666.             DWORD    offset within segment
  4667.         Return: DX:AX = 32-bit physical address or 00000000h on error
  4668.             BX destroyed
  4669.             STACK unchanged
  4670.         0013h ???
  4671.         Note:    normally jumps to code for function 0012h
  4672.         0014h copy protected-mode memory to conventional memory, with ???
  4673.         STACK:    WORD    selector for source segment
  4674.             WORD    segment of source if in real mode???
  4675.             DWORD    offset of source
  4676.             WORD    number of bytes to copy
  4677.             DWORD -> low-memory destination
  4678.         Return: AX = status???
  4679.             STACK unchanged
  4680.         0015h copy conventional memory to protected-mode memory, with ???
  4681.         STACK:    WORD    selector for destination segment
  4682.             WORD    segment of destination if in real mode???
  4683.             DWORD    offset of destination
  4684.             WORD    number of bytes to copy
  4685.             DWORD -> low-memory source
  4686.         Return: AX = status???
  4687.             STACK unchanged
  4688.         0016h set ??? pointer
  4689.         STACK:    WORD    unused
  4690.             DWORD -> ??? or 0000h:0000h
  4691.         Return: AX = 0000h
  4692.             STACK unchanged
  4693.         0017h allocate real-mode procedure???
  4694.         STACK:    DWORD    ASCIZ name of procedure
  4695.             DWORD ???
  4696.             DWORD    address of subroutine to invoke
  4697.         Return: AX = status
  4698.                 0032h procedure by that name exists
  4699.                 0033h no more real-mode procedures available
  4700.             DX destroyed
  4701.             STACK unchanged
  4702.         0018h unused
  4703.         Return: AX = 0001h
  4704.         0019h get parameter block
  4705.         Return: DX:AX -> parameter block (format unknown at this time,
  4706.                   but 92h bytes)
  4707.                   (preceded by signature "!!PARAM-BLOCK!!")
  4708.         001Ah get ???
  4709.         Return: AX = ??? (0148h seen)
  4710.         001Bh free real-mode procedure???
  4711.         STACK:    DWORD -> ASCIZ name of procedure
  4712.         Return: ???
  4713.             STACK unchanged
  4714.         001Ch check whether packets from protected mode task pending
  4715.         Return: AX = 0001h if packets pending, 0000h if not
  4716.         001Dh set ???
  4717.         STACK:    DWORD ??? or 0000h:0000h
  4718.         Return: AX,BX destroyed
  4719.             STACK unchanged
  4720.         001Eh ???
  4721.         STACK:    WORD ??? (high byte ignored)
  4722.             DWORD -> data structure (see below)
  4723.         Return: AX,BX,CX,DX destroyed
  4724.             data structure updated
  4725.             STACK unchanged
  4726.         Format of data structure:
  4727.         Offset    Size    Description
  4728.          00h  2 BYTEs    unused
  4729.          02h    WORD    ???
  4730.          04h    WORD    ???
  4731.          06h    WORD    ???
  4732.          08h  2 BYTEs    unused
  4733.          0Ah    WORD    ???
  4734.          0Ch    WORD    (call) ???
  4735.                 (ret) offset of this data structure (BUG?)
  4736.         001Fh set ???
  4737.         STACK:    WORD ??? (set to 0001h if zero)
  4738.         Return: AX destroyed
  4739.             STACK unchanged
  4740.         0020h ???
  4741.         STACK:    DWORD -> ??? (8 bytes of data)
  4742.         Return: AX = ???
  4743.             STACK unchanged
  4744.         0021h ???
  4745.         STACK:    DWORD -> ??? (8 bytes of data)
  4746.             WORD    ???
  4747.             WORD    ???
  4748.         Return: AX = ???
  4749.             STACK unchanged
  4750.         0022h ???
  4751.         STACK:    DWORD -> ??? (8 bytes of data)
  4752.             DWORD -> 4-byte buffer for results
  4753.         Return: AX = ???
  4754.             STACK unchanged
  4755.         0023h ???
  4756.         STACK:    DWORD -> ??? (8 bytes of data)
  4757.         Return: AX = ???
  4758.             STACK unchanged
  4759.         0024h set ???
  4760.         STACK:    WORD ???
  4761.         Return: AX destroyed
  4762.             STACK unchanged
  4763.         0025h get ???
  4764.         Return: AX = ??? (value set with func 0024h)
  4765.         0026h BUG: jumps to hyperspace due to fencepost error
  4766.         FFFFh set DOS memory management functions
  4767.         BX:SI -> FAR routine for allocating DOS memory
  4768.               (called with AH=48h,BX=number of paragraphs to alloc;
  4769.               returns CF clear, AX=segment of allocated memory, or
  4770.                   CF set on error)
  4771.         CX:DI -> FAR routine for freeing DOS memory
  4772.               (called with AH=49h,ES=segment of block to free;
  4773.               returns CF set on error, AX=error code)
  4774.         Note: each of these pointers normally points at INT 21/RETF
  4775.         other Return: AX = 0001h
  4776. Note:    BX may be destroyed by any of the API calls
  4777. --------E-2FFBA1BX0084-----------------------
  4778. INT 2F U - TKERNEL (Borland DOS extender) - UNINSTALL
  4779.     AX = FBA1h
  4780.     BX = 0084h
  4781.     ES:DI -> response buffer (see #2328)
  4782. Return: ES:DI buffer filled
  4783. SeeAlso: AX=FBA1h/BX=0081h,AX=FBA1h/BX=0084h
  4784.  
  4785. Format of TKERNEL response buffer:
  4786. Offset    Size    Description    (Table 2328)
  4787.  00h  4 BYTEs    signature "IABH"
  4788.  04h    WORD    success indicator
  4789.         0001h failed (INT 2F hooked by another program)
  4790.         unchanged if successful
  4791.  06h    WORD    segment of ???
  4792.  08h    WORD    segment of ??? memory block to free if nonzero
  4793.  0Ah    WORD    segment of ??? memory block to free if nonzero
  4794. --------s-2FFBFBES0000-----------------------
  4795. INT 2F U - SoundBlaster speech driver - INSTALLATION CHECK
  4796.     AX = FBFBh
  4797.     ES = 0000h
  4798. Return: ES nonzero if installed
  4799.         ES:BX -> entry point data structure (see #2329)
  4800. SeeAlso: INT 80/BX=0000h,INT F3"SoundBlaster"
  4801.  
  4802. Format of SoundBlaster entry point data structure:
  4803. Offset    Size    Description    (Table 2329)
  4804.  00h  3 BYTEs    signature "FB "
  4805.  03h    BYTE    driver major version number???
  4806.  04h    DWORD    speech driver entry point (see #2330)
  4807.  08h 24 BYTEs    ???
  4808.  20h  ? BYTEs    data buffer for calling speech driver
  4809.  
  4810. (Table 2330)
  4811. Call SoundBlaster speech driver entry point with:
  4812.     AL = function
  4813.         07h speak a string
  4814.         data buffer (see #2329) contains:
  4815.             BYTE  length of string
  4816.               N BYTEs string to speak
  4817. --------K-2FFD12-----------------------------
  4818. INT 2F - KS/KEYSTKCT.EXE - INSTALLATION CHECK
  4819.     AX = FD12h
  4820. Return: AX = 0093h if installed
  4821.         ES = resident code segment
  4822.         ES:CX -> internal "putbuf" routine
  4823. Program: KS/KEYSTKCT.EXE is a key stacking utility (4DOS KEYSTACK.SYS
  4824.       look-alike) by Martin Gerdes, published in c't 11/1991, which can be
  4825.       loaded as a device driver or as a TSR. It does not emulate 4DOS
  4826.       KSTACK API
  4827. Note:    the default buffer size is 128 keys
  4828. --------N-2FFE00BX4454-----------------------
  4829. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4830.     AX = FE00h
  4831.     BX = 4454h ("DT")
  4832.     CX = 4B52h ("KR")
  4833.     DX = 4E4Dh ("NM")
  4834. Return: AL = FFh if installed
  4835.        BX = 524Eh ("RM")
  4836.        CX = 4D44h ("MD")
  4837.        DX = 544Bh ("TK")
  4838. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4839. SeeAlso: AX=FE08h
  4840. --------N-2FFE00BX4454-----------------------
  4841. INT 2F - PC-NFS ??? - INSTALLATION CHECK
  4842.     AX = FE00h
  4843.     BX = 4454h ("DT")
  4844.     CX = 4B52h ("KR")
  4845.     DX = 544Dh ("TM")
  4846. Return: AL = FFh if installed
  4847.        BX = 5254h ("RT")
  4848.        CX = 4D44h ("MD")
  4849.        DX = 544Bh ("TK")
  4850. Note:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  4851. SeeAlso: AX=FE08h
  4852. --------U-2FFE00DI4E55-----------------------
  4853. INT 2F U - NORTON UTILITIES 5.0+ TSRs - INSTALLATION CHECK/STATUS REPORT
  4854.     AX = FE00h
  4855.     DI = 4E55h ("NU")
  4856.     SI = TSR identifier (see #2331)
  4857. Return: SI = TSR reply
  4858.         lowercase version of SI on entry (i.e. SI OR 2020h)
  4859.     AH = status
  4860.         00h installed but disabled internally
  4861.         01h installed and enabled
  4862.     AL = installed product
  4863.         00h NCACHE-x or DISKREET
  4864.         01h SPEEDRV / FILESAVE / EP / DISKMON v6+ installed
  4865.         02h NCACHE2 / SMARTCAN
  4866.         45h DISKMON v5 installed
  4867.     BX = length of *.INI file (DISKMON and FILESAVE/EP/SMARTCAN only)
  4868.           (see #2332,#2333)
  4869.     CX = segment of resident portion
  4870.         FFFFh if completely loaded high (NCACHE)
  4871. ---FILESAVE/EP---
  4872.     DL = ??? (apparently always 00h)
  4873. ---DISKMON---
  4874.     DX = ??? (apparently always 1AE6h [v5] / 1B86h [v6] / 1C26h [v7])
  4875. Notes:    the value returned in CX is incorrect for NCACHE 6.00
  4876.     all Norton Caches install as SMARTAAR drivers like SMARTDRV v3
  4877.     NCACHE2 and SPEEDRV both support the SMARTDRV v4+ installation check
  4878.     to detect Diskreet NDisk drives use CDS/DPB (see INT 21/AH=52h)
  4879. SeeAlso: AX=4A10h/BX=0000h,AX=FE01h,AX=FE02h,AX=FE03h,AX=FE04h,AX=FE05h
  4880. SeeAlso: INT 21/AX=4402h"SMARTDRV"
  4881.  
  4882. (Table 2331)
  4883. Values for Norton Utilities TSR identifier:
  4884.  4346h    ("CF") NCACHE-F (v5) / NCACHE (v6) / NCACHE2 (v7+) / SPEEDRV
  4885.  4353h    ("CS") NCACHE-S (v5 only)
  4886.  4443h    ("DC") DISKREET
  4887.  444Dh    ("DM") DISKMON
  4888.  4653h    ("FS") FILESAVE (v5) / EP (v6) / SMARTCAN (v7+)
  4889.  
  4890. Format of DISKMON.INI file:
  4891. Offset    Size    Description    (Table 2332)
  4892. -6Ch 108 BYTEs    (in memory copy only)
  4893.         list of filenames which are always protected:
  4894.           IBMBIO.COM/IBMDOS.COM, IO.SYS/MSDOS.SYS, TBIOS.SYS/TDOS.SYS,
  4895.           MIO.SYS/IO.BIN, COMMAND.COM
  4896.  00h    BYTE    ??? always 01h
  4897.  01h    BYTE    disk light (00h off, 01h on)
  4898.  02h    BYTE    disk protection (00h off, 01h on)
  4899.  03h    BYTE    protected areas
  4900.         01h system area
  4901.         02h files
  4902.         03h system area and files
  4903.         04h entire disk
  4904.  04h    BYTE    floppy access (00h not allowed, 01h allowed)
  4905.  05h 27 BYTEs    filename extension list (9 entries)
  4906.         (lowercase, blank padded or = 000000h)
  4907.  20h 240 BYTEs    filename list (20 entries)
  4908.         (lowercase, name and extension blank padded, with '.')
  4909. Note:    CX:0508h -> copy in installed TSR (v5)
  4910.     CX:052Fh -> copy in installed TSR (v6)
  4911.     CX:04E0h -> copy in installed TSR (v7-v8)
  4912.  
  4913. Format of FILESAVE.INI / EP.INI / SMARTCAN.INI file:
  4914. Offset    Size    Description    (Table 2333)
  4915.  00h 26 BITs    drive list (bit set: file protection on, cleared: off):
  4916.  00h    BYTE    drives    A: - H:
  4917.  01h    BYTE    drives    I: - P:
  4918.  02h    BYTE    drives    Q: - X:
  4919.  03h    BYTE    drives    Y: - Z:
  4920.  04h    BYTE    which files to protect
  4921.         00h all files
  4922.         01h all files with extension in list
  4923.         02h all files except those with extension in list
  4924.  05h 27 BYTEs    filename extension list (9 entries, uppercase, ASCIZ)
  4925.  20h    BYTE    include files with archive bit clear (00h no, 01h yes)
  4926.  21h    WORD    number of days after which files are purged (0 = never)
  4927.  23h    WORD    max kilobytes of erased file space to hold (0 = all)
  4928. Note:    CX:03D2h -> copy in installed TSR (v5)
  4929.     CX:03F5h -> copy in installed TSR (v6)
  4930.     CX:0434h -> copy in installed TSR (v7-v8)
  4931. --------U-2FFE00DX474F-----------------------
  4932. INT 2F - GO! v3.22+ - API
  4933.     AX = FE00h
  4934.     DX = 474Fh ('GO')
  4935.     SI = function number
  4936.         0063h (BCD for '?') installation check
  4937.         0078h (BCD for 'N') non-registered search (two levels only)
  4938.         0082h (BCD for 'R') reserved for registered version
  4939.         0083h (BCD for 'S') reserved for registered version
  4940.         0085h (BCD for 'U') uninstall
  4941.     BX:CX -> buffer (for search functions)
  4942.         buffer filled with search spec, i.e. "APL" to get first
  4943.           directory containing the substring APL, ":\APL" to find
  4944.           the first top-level directory beginning with the letters
  4945.           APL
  4946. Return: BX:CX buffer filled with result (search functions only)
  4947.         result is counted ASCIZ directory name, empty string if
  4948.         no matches (i.e. first byte is length of name, followed by
  4949.         name)
  4950. Program: GO! is a shareware directory locator TSR by Steve Ryckman
  4951. Note:    the application-supplied buffer for the requests and results which
  4952.       BX:CX points at must lie outside the conventional (low-640K)
  4953.       memory, since the TSR swaps memory on pop-up; a common location is
  4954.       the last 96 bytes of the video memory or a UMB
  4955. --------U-2FFE01DI4E55-----------------------
  4956. INT 2F U - NORTON UTILITIES 5.0+ TSRs - ENABLE
  4957.     AX = FE01h
  4958.     DI = 4E55h ("NU")
  4959.     SI = TSR identifier (see #2331)
  4960. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4961.     AX = status
  4962.         0002h successful (DISKMON, FILESAVE, EP)
  4963.         FE00h successful (NCACHE-x, DISKREET)
  4964. Notes:    if the enable/disable calls are used on DISKMON or NCACHE-x, the status
  4965.       report generated by the programs still indicates the previous state,
  4966.       and DISKMON.INI is not updated
  4967.     apparently has no effect on DISKREET
  4968. SeeAlso: AX=FE00h,AX=FE02h
  4969. --------U-2FFE02DI4E55-----------------------
  4970. INT 2F U - NORTON UTILITIES 5.0+ TSRs - DISABLE
  4971.     AX = FE02h
  4972.     DI = 4E55h ("NU")
  4973.     SI = TSR identifier (see #2331)
  4974. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4975.     AX = status
  4976.         0004h successful (DISKMON, FILESAVE)
  4977.         FE00h successful (NCACHE-x, DISKREET)
  4978. Notes:    (see also AX=FE01h)
  4979.     this function appears to be unsafe, as the cache buffers are not
  4980.       flushed
  4981. SeeAlso: AX=FE00h,AX=FE01h
  4982. --------U-2FFE03DI4E55-----------------------
  4983. INT 2F U - NORTON UTILITIES 5.0+ TSRs - FLUSH BUFFERS
  4984.     AX = FE03h
  4985.     DI = 4E55h ("NU")
  4986.     SI = TSR identifier (see #2331)
  4987. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI OR 2020h)
  4988.     AX = status
  4989.         0006h successful???
  4990. Notes:    only supported by DISKMON, FILESAVE, and NCACHE-x
  4991.     useful for flushing NCACHE before rebooting
  4992. SeeAlso: AX=FE00h,AX=FE10h
  4993. --------U-2FFE04DI4E55-----------------------
  4994. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  4995.     AX = FE04h
  4996.     DI = 4E55h ("NU")
  4997.     SI = TSR identifier (see #2331)
  4998. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  4999.     AX = status
  5000.         0008h successful???
  5001. SeeAlso: AX=FE00h
  5002. --------U-2FFE05DI4E55-----------------------
  5003. INT 2F U - NORTON UTILITIES 5.0+ DISKMON, FILESAVE / EP - internal - ???
  5004.     AX = FE05h
  5005.     DI = 4E55h ("NU")
  5006.     SI = TSR identifier (see #2331)
  5007. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  5008.     AX = status
  5009.         000Ah successful???
  5010. Note:    reportedly dangerous
  5011. SeeAlso: AX=FE00h
  5012. --------N-2FFE08-----------------------------
  5013. INT 2F - PC-NFS ??? - GET ???
  5014.     AX = FE08h
  5015. Return: ES:BX -> ???
  5016. Notes:    DV/X 1.10 DVPCNFS.DVR searches AH=FEh,FFh,C0h-FDh for a valid response
  5017.     both the driver responding to AX=FE00h/DX=4E4Dh and the one responding
  5018.       to AX=FE00h/DX=544Dh support this function
  5019. SeeAlso: AX=FE00h/BX=4454h
  5020. --------U-2FFE10DI4E55-----------------------
  5021. INT 2F U - NORTON UTILITIES 6.0 NCACHE - REBOOT
  5022.     AX = FE10h
  5023.     DI = 4E55h ("NU")
  5024.     SI = TSR identifier (see #2331)
  5025. Return: SI = TSR reply (lowercase version of entry SI, i.e. SI or 2020h)
  5026.     AX = status
  5027. Note:    probably used to flush NCACHE buffers and reboot when Ctrl-Alt-Del is
  5028.       detected
  5029. SeeAlso: AX=FE03h
  5030. --------S-2FFEEF-----------------------------
  5031. INT 2F - RTS Control TSR - INSTALLATION CHECK
  5032.     AX = FEEFh
  5033. Return: AX = EFFEh if installed
  5034.         BX = port address
  5035. Program: RTS Control TSR is a utility by Michal Szokolo to lower the RTS
  5036.       signal on a COM port during disk accesses to avoid losing incoming
  5037.       data
  5038. --------N-2FFF00-----------------------------
  5039. INT 2F - Topware Network Operating System - INSTALLATION CHECK
  5040.     AX = FF00h
  5041. Return: AL = status
  5042.         00h not installed, OK to install
  5043.         01h not installed, not OK to install
  5044.         FFh installed
  5045. SeeAlso: AX=FF01h,AX=FF02h,AX=FF10h,INT 21/AX=FF00h"Topware",INT 7A"Topware"
  5046. --------N-2FFF01-----------------------------
  5047. INT 2F - Topware Network Operating System - GET VERSION
  5048.     AX = FF01h
  5049. Return: AX = version
  5050. SeeAlso: AX=FF00h,AX=FF02h
  5051. --------N-2FFF02-----------------------------
  5052. INT 2F - TopWare Network OS v5.10+ - GET TopNet VERSION STRING
  5053.     AX = FF02h
  5054. Return: ES:BX -> version string
  5055. SeeAlso: AX=FF00h,AX=FF01h
  5056. --------N-2FFF10-----------------------------
  5057. INT 2F - TopWare Network OS v5.10+ - TopTerm - INSTALLATION CHECK
  5058.     AX = FF10h
  5059. Return: AL = status (00h not installed, 01h installed)
  5060. SeeAlso: AX=FF00h,AX=FF11h,AX=FF12h,AX=FF13h
  5061. --------N-2FFF11-----------------------------
  5062. INT 2F - TopWare Network OS v5.10+ - TopTerm - ENABLE KEYBOARD SERVICE
  5063.     AX = FF11h
  5064. Note:    this function is only available on workstations, not on the server
  5065. SeeAlso: AX=FF10h,AX=FF12h
  5066. --------N-2FFF12-----------------------------
  5067. INT 2F - TopWare Network OS v5.10+ - TopTerm - DISABLE KEYBOARD SERVICE
  5068.     AX = FF12h
  5069. Note:    this function is only available on workstations, not on the server
  5070. SeeAlso: AX=FF10h,AX=FF11h
  5071. --------N-2FFF13-----------------------------
  5072. INT 2F - TopWare Network OS v5.10+ - TopTerm - SET INSTALLATION FLAG
  5073.     AX = FF13h
  5074.     CL = new state (00h off, 01h on)
  5075. SeeAlso: AX=FF10h
  5076. --------N-2FFF14-----------------------------
  5077. INT 2F - TopWare Network OS v5.10+ - START BACKGROUND RECEIVE VIDEO DATA
  5078.     AX = FF14h
  5079. Note:    this function is only available on workstations, not on the server
  5080. SeeAlso: AX=FF10h,AX=FF15h
  5081. --------N-2FFF15-----------------------------
  5082. INT 2F - TopWare Network OS v5.10+ - END BACKGROUND RECEIVE VIDEO DATA
  5083.     AX = FF15h
  5084. Note:    this function is only available on workstations, not on the server
  5085. SeeAlso: AX=FF10h,AX=FF14h
  5086. --------N-2FFF16-----------------------------
  5087. INT 2F - TopWare Network OS v5.10+ - SET CONTROL NUMBER OF "SHOW" SCREEN
  5088.     AX = FF16h
  5089.     BL = which to set (00h TopShow, FFh TopTerm)
  5090.     CX = destination screen
  5091.         0000h all stations
  5092.         0000h-00FFh (TopTerm only) send to group CL
  5093.         8001h-80FEh send to station CL
  5094. SeeAlso: AX=FF18h
  5095. --------N-2FFF18-----------------------------
  5096. INT 2F - TopWare Network OS v5.10+ - SEND FULL SCREEN OF DATA FOR TopShow
  5097.     AX = FF18h
  5098. SeeAlso: AX=FF00h,AX=FF16h,AX=FF27h
  5099. --------N-2FFF23-----------------------------
  5100. INT 2F - TopWare Network OS v5.10+ - CLOSE SPOOL FILES AND START PRINTING
  5101.     AX = FF23h
  5102. SeeAlso: AX=FF00h
  5103. --------N-2FFF27-----------------------------
  5104. INT 2F - TopWare Network OS v5.10+ - GET "SHOW" TYPE
  5105.     AX = FF27h
  5106. Return: AL = type (00h complete version, 01h simple version)
  5107.     BL = "show" functions flag (00h disabled, 01h enabled)
  5108. SeeAlso: AX=FF16h,AX=FF18h
  5109. --------D-30---------------------------------
  5110. INT 30 - (NOT A VECTOR!) - DOS 1+ - FAR JMP instruction for CP/M-style calls
  5111.    the CALL 5 entry point does a FAR jump to here
  5112. Note:    under DOS 2+, the instruction at PSP:0005 points two bytes too low in
  5113.       memory
  5114. SeeAlso: INT 21/AH=26h
  5115. --------V-30---------------------------------
  5116. INT 30 - QRIP/TSR - USED BY GRAPHICS LIBRARY
  5117. Program: QRIP/TSR is a shareware TSR by Shane Hathaway implementing the Remote
  5118.       Imaging Protocol (RIP, RIPscrip) used by several BBS systems to
  5119.       provide a graphical user interface
  5120. SeeAlso: INT 2F/AX=ACF0h
  5121. --------D-31---------------------------------
  5122. INT 31 - overwritten by CP/M jump instruction in INT 30
  5123. --------v-31---------------------------------
  5124. INT 31 - VIRUS - "Vacsina" series - INSTALLATION CHECK (NOT A VECTOR!)
  5125. Note:    if one of the Vacsina viruses is resident, the low byte of this
  5126.       interrupt still contains the last byte of the INT 30 CP/M JMP
  5127.       instruction, but the remaining three bytes are 7Fh 39h followed
  5128.       by the Vacsina version number
  5129. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 32"VIRUS"
  5130. --------E-310000-----------------------------
  5131. INT 31 P - DPMI 0.9+ - ALLOCATE LDT DESCRIPTORS
  5132.     AX = 0000h
  5133.     CX = number of descriptors to allocate
  5134. Return: CF clear if successful
  5135.         AX = base selector
  5136.     CF set on error
  5137.         AX = error code (DPMI 1.0+) (see #2334)
  5138. Notes:    DPMI is the DOS Protected-Mode Interface
  5139.     the base and limit of the returned descriptors will be 0, and the type
  5140.       will be "data"
  5141.     add the value returned by INT 31/AX=0003h to move to subsequent
  5142.       descriptors if multiple descriptors were allocated
  5143.     not supported by MS Windows 3.0 in Standard mode
  5144. SeeAlso: AX=0001h,AX=000Dh,INT 21/AX=3501h
  5145.  
  5146. (Table 2334)
  5147. Values for DPMI 1.0 error code:
  5148.  0000h-7FFFh DOS error passed through by DPMI
  5149.  8001h    unsupported function
  5150.  8002h    object in wrong state for function
  5151.  8003h    system integrity would be endangered
  5152.  8004h    deadlock detected
  5153.  8005h    pending serialization request cancelled
  5154.  8010h    out of DPMI internal resources
  5155.  8011h    descriptor unavailable
  5156.  8012h    linear memory unavailable
  5157.  8013h    physical memory unavailable
  5158.  8014h    backing store unavailable
  5159.  8015h    callback unavailable
  5160.  8016h    handle unavailable
  5161.  8017h    maximum lock count exceeded
  5162.  8018h    shared memory already serialized exclusively by another
  5163.  8019h    shared memory already serialized shared by another client
  5164.  8021h    invalid value for numeric or flag parameter
  5165.  8022h    invalid segment selector
  5166.  8023h    invalid handle
  5167.  8024h    invalid callback
  5168.  8025h    invalid linear address
  5169.  8026h    request not supported by hardware
  5170. --------E-310001-----------------------------
  5171. INT 31 P - DPMI 0.9+ - FREE LDT DESCRIPTOR
  5172.     AX = 0001h
  5173.     BX = selector to free
  5174. Return: CF clear if successful
  5175.     CF set on error
  5176.         AX = error code (DPMI 1.0+) (8022h) (see #2334)
  5177. Notes:    only one descriptor is freed per call
  5178.     the program's initial CS, DS, and SS descriptors may be freed
  5179.     (DPMI 1.0+) any segment registers containing the freed selector are
  5180.       set to 0000h
  5181.     not supported by MS Windows 3.0 in Standard mode
  5182. SeeAlso: AX=0000h,AX=000Ah,AX=000Dh,INT 21/AX=3502h
  5183. --------E-310002-----------------------------
  5184. INT 31 P - DPMI 0.9+ - SEGMENT TO DESCRIPTOR
  5185.     AX = 0002h
  5186.     BX = real mode segment
  5187. Return: CF clear if successful
  5188.         AX = selector corresponding to real mode segment (64K limit)
  5189.     CF set on error
  5190.         AX = error code (DPMI 1.0+) (8011h) (see #2334)
  5191. Notes:    multiple calls for the same real mode segment return the same selector
  5192.     the returned descriptor can never be modified or freed
  5193.     not supported by MS Windows 3.0 in Standard mode
  5194. --------E-310003-----------------------------
  5195. INT 31 P - DPMI 0.9+ - GET NEXT SELECTOR INCREMENT VALUE
  5196.     AX = 0003h
  5197. Return: CF clear
  5198.         AX = value to add to get next sequential selector
  5199. Notes:    the increment will be a power of two
  5200.     not supported by MS Windows 3.0 in Standard mode
  5201. SeeAlso: AX=0000h
  5202. --------E-310004-----------------------------
  5203. INT 31 P - DPMI 0.9+ - LOCK SELECTOR
  5204.     AX = 0004h
  5205.     BX = selector to lock (prevent paging)
  5206. Return: ???
  5207. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5208.       specification, this function is called by MS Windows TASKMAN,
  5209.       PROGMAN, and KERNEL
  5210. SeeAlso: AX=0005h,AX=0600h
  5211. --------E-310005-----------------------------
  5212. INT 31 P - DPMI 0.9+ - UNLOCK SELECTOR
  5213.     AX = 0005h
  5214.     BX = selector to unlock (permit paging)
  5215. Return: ???
  5216. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  5217.       specification, this function is called by MS Windows TASKMAN,
  5218.       PROGMAN, and KERNEL
  5219. SeeAlso: AX=0004h,AX=0601h
  5220. --------E-310006-----------------------------
  5221. INT 31 P - DPMI 0.9+ - GET SEGMENT BASE ADDRESS
  5222.     AX = 0006h
  5223.     BX = selector
  5224. Return: CF clear if successful
  5225.         CX:DX = linear base address of segment
  5226.     CF set on error
  5227.         AX = error code (DPMI 1.0+) (8022h) (see #2334)
  5228. Note:    not supported by MS Windows 3.0 in Standard mode
  5229. SeeAlso: AX=0007h,INT 21/AX=3504h
  5230. --------E-310007-----------------------------
  5231. INT 31 P - DPMI 0.9+ - SET SEGMENT BASE ADDRESS
  5232.     AX = 0007h
  5233.     BX = selector
  5234.     CX:DX = linear base address
  5235. Return: CF clear if successful
  5236.     CF set on error
  5237.         AX = error code (DPMI 1.0+) (8022h,8025h) (see #2334)
  5238. Notes:    only modify descriptors allocated with INT 31/AX=0000h
  5239.     only the low 24 bits of the address will be used by 16-bit DPMI
  5240.       implementations even on a 386 or higher
  5241.     DPMI 1.0+ automatically reloads any segment registers containing the
  5242.       selector being modified
  5243.     not supported by MS Windows 3.0 in Standard mode
  5244. SeeAlso: AX=0006h,AX=0008h,AX=0009h,AX=000Ch,INT 21/AX=3503h
  5245. SeeAlso: INT 21/AH=E9h"OS/286",INT 2C/AX=0002h
  5246. --------E-310008-----------------------------
  5247. INT 31 P - DPMI 0.9+ - SET SEGMENT LIMIT
  5248.     AX = 0008h
  5249.     BX = selector
  5250.     CX:DX = segment limit
  5251. Return: CF clear if successful
  5252.     CF set on error
  5253.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2334)
  5254. Notes:    CX must be zero for 16-bit DPMI implementations
  5255.     limits greater than 1MB must be page aligned (low 12 bits set)
  5256.     only modify descriptors allocated with INT 31/AX=0000h
  5257.     DPMI 1.0+ automatically reloads any segment registers containing the
  5258.       selector being modified
  5259.     not supported by MS Windows 3.0 in Standard mode
  5260. SeeAlso: AX=0007h,AX=0009h,AX=000Ch,INT 21/AX=3505h,INT 21/AH=E9h"OS/286"
  5261. SeeAlso: INT 2C/AX=0003h,#0401 at INT 15/AH=89h
  5262. --------E-310009-----------------------------
  5263. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR ACCESS RIGHTS
  5264.     AX = 0009h
  5265.     BX = selector
  5266.     CL = access rights/type byte (see #0402 at INT 15/AH=89h)
  5267.     CH = 80386 extended rights/type byte (see #0403 at INT 15/AH=89h)
  5268.         (32-bit DPMI implementations only)
  5269. Return: CF clear if successful
  5270.     CF set on error
  5271.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2334)
  5272. Notes:    if the Present bit is clear, CL bits 0-3 may have any value
  5273.     DPMI 1.0+ automatically reloads any segment registers containing the
  5274.       selector being modified
  5275.     not supported by MS Windows 3.0 in Standard mode
  5276. SeeAlso: AX=0007h,AX=0008h,AX=000Ch,INT 21/AX=2514h,INT 2C/AX=0004h
  5277. SeeAlso: INT 2C/AX=0005h
  5278. --------E-31000A-----------------------------
  5279. INT 31 P - DPMI 0.9+ - CREATE ALIAS DESCRIPTOR
  5280.     AX = 000Ah
  5281.     BX = selector
  5282. Return: CF clear if successful
  5283.         AX = new data selector
  5284.     CF set on error
  5285.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2334)
  5286. Notes:    fails if selector in BX is not a code segment or is invalid
  5287.     use INT 31/AX=0001h to free new selector
  5288.     future changes to the original selector will not be reflected in the
  5289.       returned alias selector
  5290.     not supported by MS Windows 3.0 in Standard mode
  5291. SeeAlso: AX=0001h
  5292. --------E-31000B-----------------------------
  5293. INT 31 P - DPMI 0.9+ - GET DESCRIPTOR
  5294.     AX = 000Bh
  5295.     BX = LDT selector
  5296.     ES:(E)DI -> 8-byte buffer for copy of descriptor
  5297. Return: CF clear if successful
  5298.         buffer filled
  5299.     CF set on error
  5300.         AX = error code (DPMI 1.0+) (8022h) (see #2334)
  5301. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5302.     not supported by MS Windows 3.0 in Standard mode
  5303. SeeAlso: AX=000Ch
  5304. --------E-31000C-----------------------------
  5305. INT 31 P - DPMI 0.9+ - SET DESCRIPTOR
  5306.     AX = 000Ch
  5307.     BX = LDT selector
  5308.     ES:(E)DI -> 8-byte buffer containing descriptor
  5309. Return: CF clear if successful
  5310.     CF set on error
  5311.         AX = error code (DPMI 1.0+) (8021h,8022h,8025h) (see #2334)
  5312. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5313.     only modify descriptors allocated with INT 31/AX=0000h
  5314.     DPMI 1.0+ automatically reloads any segment registers containing the
  5315.       selector being modified
  5316.     not supported by MS Windows 3.0 in Standard mode
  5317. SeeAlso: AX=000Bh
  5318. --------E-31000D-----------------------------
  5319. INT 31 P - DPMI 0.9+ - ALLOCATE SPECIFIC LDT DESCRIPTOR
  5320.     AX = 000Dh
  5321.     BX = LDT selector
  5322. Return: CF clear if successful
  5323.         descriptor allocated
  5324.     CF set on error
  5325.         AX = error code (DPMI 1.0+) (8011h,8022h) (see #2334)
  5326. Notes:    free descriptor with INT 31/AX=0001h
  5327.     the first 16 descriptors (04h-7Ch) are reserved for this function, but
  5328.       some may already be in use by other applications under DPMI 0.9;
  5329.       DPMI 1.0 guarantees 16 descriptors per client
  5330.     not supported by MS Windows 3.0 in Standard mode
  5331. SeeAlso: AX=0000h,AX=0001h
  5332. --------E-31000E-----------------------------
  5333. INT 31 P - DPMI 1.0+ - GET MULTIPLE DESCRIPTORS
  5334.     AX = 000Eh
  5335.     CX = number of descriptors to copy
  5336.     ES:(E)DI -> descriptor buffer (see #2335)
  5337. Return: CF clear if successful
  5338.         descriptors copied
  5339.     CF set on error
  5340.         AX = error code (8022h) (see #2334)
  5341.         CX = number of descriptors successfully copied
  5342. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5343.     if the function fails, the first CX descriptors are valid; the
  5344.       remainder are not modified
  5345. SeeAlso: AX=000Bh,AX=000Fh
  5346.  
  5347. Format of DPMI descriptor buffer entry (one per descriptor to get):
  5348. Offset    Size    Description    (Table 2335)
  5349.  00h    WORD    selector (set by client)
  5350.  02h    QWORD    descriptor (set by host)
  5351. --------E-31000F-----------------------------
  5352. INT 31 P - DPMI 1.0+ - SET MULTIPLE DESCRIPTORS
  5353.     AX = 000Fh
  5354.     CX = number of descriptors to copy
  5355.     ES:(E)DI -> descriptor buffer (see #2336)
  5356. Return: CF clear if successful
  5357.         descriptors copied
  5358.     CF set on error
  5359.         AX = error code (8021h,8022h,8025h) (see #2334)
  5360.         CX = number of descriptors successfully copied
  5361. Notes:    16-bit programs use ES:DI as pointer, 32-bit must use ES:EDI
  5362.     if the function fails, the first CX descriptors are valid; the
  5363.       remainder are not modified
  5364.     DPMI 1.0+ automatically reloads any segment registers containing a
  5365.       selector being modified
  5366. SeeAlso: AX=000Ch,AX=000Eh
  5367.  
  5368. Format of DPMI descriptor buffer entry (one per descriptor to set):
  5369. Offset    Size    Description    (Table 2336)
  5370.  00h    WORD    selector
  5371.  02h    QWORD    descriptor
  5372. --------E-310100-----------------------------
  5373. INT 31 P - DPMI 0.9+ - ALLOCATE DOS MEMORY BLOCK
  5374.     AX = 0100h
  5375.     BX = number of paragraphs to allocate
  5376. Return: CF clear if successful
  5377.         AX = real mode segment of allocated block
  5378.         DX = first selector for allocated block
  5379.     CF set on error
  5380.         AX = DOS error code (07h,08h) (see #0980 at INT 21/AH=59h)
  5381.         (DPMI 1.0+) DPMI error code (8011h) (see #2334)
  5382.         BX = size (in paragraphs) of largest available block
  5383. Notes:    multiple contiguous selectors are allocated for blocks of more than 64K
  5384.       if the caller is a 16-bit program
  5385.     never modify or deallocate returned descriptors
  5386.     not supported by MS Windows 3.0 in Standard mode
  5387. SeeAlso: AX=0101h,AX=0501h
  5388. --------E-310101-----------------------------
  5389. INT 31 P - DPMI 0.9+ - FREE DOS MEMORY BLOCK
  5390.     AX = 0101h
  5391.     DX = selector of block
  5392. Return: CF set if successful
  5393.     CF set on error
  5394.         AX = DOS error code (07h,09h) (see #0980 at INT 21/AH=59h)
  5395. Notes:    all descriptors allocated for the block are automatically freed
  5396.     DPMI 1.0+ automatically zeros any segment registers containing a
  5397.       selector freed by this function
  5398.     not supported by MS Windows 3.0 in Standard mode
  5399. SeeAlso: AX=0100h,AX=0102h,AX=0502h
  5400. --------E-310102-----------------------------
  5401. INT 31 P - DPMI 0.9+ - RESIZE DOS MEMORY BLOCK
  5402.     AX = 0102h
  5403.     BX = new block size in paragraphs
  5404.     DX = selector of block
  5405. Return: CF clear if successful
  5406.     CF set on error
  5407.         AX = DOS error code (07h,08h,09h) (see #0980 at INT 21/AH=59h)
  5408.         (DPMI 1.0+) DPMI error code (8011h,8022h) (see #2334)
  5409.         BX = maximum block size (in paragraphs) possible
  5410. Notes:    increasing the size of a block past a 64K boundary will fail if the
  5411.       next descriptor in the LDT is already in use
  5412.     shrinking a block past a 64K boundary will cause some selectors to be
  5413.       freed; DPMI 1.0+ automatically zeros any segment registers containing
  5414.       a selector freed by this function
  5415.     not supported by MS Windows 3.0 in Standard mode
  5416. SeeAlso: AX=0100h
  5417. --------E-310200-----------------------------
  5418. INT 31 P - DPMI 0.9+ - GET REAL MODE INTERRUPT VECTOR
  5419.     AX = 0200h
  5420.     BL = interrupt number
  5421. Return: CF clear
  5422.     CX:DX = segment:offset of real mode interrupt handler
  5423. Note:    the DPMI implementation is required to support all 256 vectors
  5424. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2503h
  5425. --------E-310201-----------------------------
  5426. INT 31 P - DPMI 0.9+ - SET REAL MODE INTERRUPT VECTOR
  5427.     AX = 0201h
  5428.     BL = interrupt number
  5429.     CX:DX = segment:offset of real mode handler
  5430. Return: CF clear
  5431. Note:    all memory that may be touched by a hardware interrupt handler must be
  5432.       locked down with INT 31/AX=0600h
  5433. SeeAlso: AX=0200h,AX=0205h,AX=0600h,INT 21/AX=2505h
  5434. --------E-310202-----------------------------
  5435. INT 31 P - DPMI 0.9+ - GET PROCESSOR EXCEPTION HANDLER VECTOR
  5436.     AX = 0202h
  5437.     BL = exception number (00h-1Fh)
  5438. Return: CF clear if successful
  5439.         CX:(E)DX = selector:offset of handler
  5440.     CF set on error
  5441.         AX = error code (DPMI 1.0+) (8021h) (see #2334)
  5442. Notes:    16-bit programs receive the pointer in CX:DX, 32-bit programs in CX:EDX
  5443.     DPMI 1.0+ supports this function only for backward compatibility; use
  5444.        AX=0210h or AX=0211h instead
  5445.     not supported by MS Windows 3.0 in Standard mode
  5446. SeeAlso: AX=0203h,AX=0210h,AX=0211h,INT 2F/AX=FB42h/BX=0021h
  5447. --------E-310203-----------------------------
  5448. INT 31 P - DPMI 0.9+ - SET PROCESSOR EXCEPTION HANDLER VECTOR
  5449.     AX = 0203h
  5450.     BL = exception number (00h-1Fh)
  5451.     CX:(E)DX = selector:offset of handler
  5452. Return: CF clear if successful
  5453.     CF set on error
  5454.         AX = error code (DPMI 1.0+) (8021h,8022h) (see #2334)
  5455. Notes:    32-bit programs must supply an offset in EDX and use a 32-bit interrupt
  5456.       stack frame on chaining to the next exception handler
  5457.     the handler should return using a FAR return
  5458.     all fault stack frames contain an error code, but it is only valid for
  5459.       exceptions 08h and 0Ah-0Eh
  5460.     handlers will only be called if the exception occurs in protected mode,
  5461.       and the DPMI host does not transparently handle the exception
  5462.     the handler may change certain values on the stack frame
  5463.       (see #2337,#2338)
  5464.     DPMI 1.0+ supports this function only for backward compatibility; use
  5465.        AX=0212h or AX=0213h instead
  5466.     not supported by MS Windows 3.0 in Standard mode
  5467. SeeAlso: AX=0202h,AX=0212h,AX=0213h,INT 2F/AX=FB42h/BX=0022h
  5468.  
  5469. Format of stack frame for 16-bit programs: (offset from SS:SP)
  5470. Offset    Size    Description    (Table 2337)
  5471.  00h    DWORD    return CS:IP (do not change)
  5472.  04h    WORD    error code
  5473.  06h    DWORD    CS:IP of exception
  5474.  0Ah    WORD    flags
  5475.  0Ch    DWORD    SS:SP
  5476.  
  5477. Format of stack frame for 32-bit programs: (offset from SS:ESP)
  5478. Offset    Size    Description    (Table 2338)
  5479.  00h    DWORD    return EIP (do not change)
  5480.  04h    WORD    return CS selector (do not change)
  5481.  06h    WORD    reserved (do not change)
  5482.  08h    DWORD    error code
  5483.  0Ch    DWORD    EIP of exception
  5484.  10h    WORD    CS selector of exception
  5485.  12h    WORD    reserved (do not change)
  5486.  14h    DWORD    EFLAGS
  5487.  18h    DWORD    ESP
  5488.  1Ch    WORD    SS
  5489.  1Eh    WORD    reserved (do not change)
  5490. --------E-310204-----------------------------
  5491. INT 31 P - DPMI 0.9+ - GET PROTECTED MODE INTERRUPT VECTOR
  5492.     AX = 0204h
  5493.     BL = interrupt number
  5494. Return: CF clear
  5495.     CX:(E)DX = selector:offset of handler
  5496. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5497.     DPMI implementations are required to support all 256 vectors
  5498.     not supported by MS Windows 3.0 in Standard mode
  5499. SeeAlso: AX=0200h,AX=0205h,INT 21/AX=2502h,INT 2C/AX=0006h
  5500. SeeAlso: INT 2F/AX=FB42h/BX=0024h
  5501. --------E-310205-----------------------------
  5502. INT 31 P - DPMI 0.9+ - SET PROTECTED MODE INTERRUPT VECTOR
  5503.     AX = 0205h
  5504.     BL = interrupt number
  5505.     CX:(E)DX = selector:offset of handler
  5506. Return: CF clear if successful
  5507.     CF set on error
  5508.         AX = error code (DPMI 1.0+) (8022h) (see #2334)
  5509. Notes:    16-bit programs use CX:DX, 32-bit programs use CX:EDX
  5510.     32-bit programs must use a 32-bit interrupt stack frame when chaining
  5511.       to the next handler
  5512.     DPMI implementations are required to support all 256 vectors
  5513.     hardware interrupts are reflected to the virtual machine's primary
  5514.       client, software interrupts to the current client
  5515.     not supported by MS Windows 3.0 in Standard mode
  5516. SeeAlso: AX=0201h,AX=0204h,INT 21/AX=2504h,INT 2C/AX=0007h
  5517. SeeAlso: INT 2F/AX=FB42h/BX=0025h
  5518. --------E-310210-----------------------------
  5519. INT 31 P - DPMI 1.0+ - GET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5520.     AX = 0210h
  5521.     BL = exception number (00h-1Fh)
  5522. Return: CF clear if successful
  5523.         CX:(E)DX = selector:offset of exception handler
  5524.     CF set on error
  5525.         AX = error code (8021h) (see #2334)
  5526. Note:    DPMI host reflects exception to current client's handler
  5527. SeeAlso: AX=0202h,AX=0211h,AX=0212h
  5528. --------E-310211-----------------------------
  5529. INT 31 P - DPMI 1.0+ - GET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5530.     AX = 0211h
  5531.     BL = exception number (00h-1Fh)
  5532. Return: CF clear if successful
  5533.         CX:(E)DX = selector:offset of exception handler
  5534.     CF set on error
  5535.         AX = error code (8021h) (see #2334)
  5536. Notes:    returns address of protected-mode handler for real-mode exception
  5537.     DPMI host performs a switch to protected mode, reflects the exception
  5538.       to the virtual machine's primary client, and returns to real mode
  5539.       on the handler's completion
  5540. SeeAlso: AX=0202h,AX=0210h,AX=0213h
  5541. --------E-310212-----------------------------
  5542. INT 31 P - DPMI 1.0+ - SET PROTECTED MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5543.     AX = 0212h
  5544.     BL = exception or fault number (00h-1Fh)
  5545.     CX:(E)DX = exception handler selector:offset
  5546. Return: CF clear if successful
  5547.     CF set on error
  5548.         AX = error code (8021h,8022h) (see #2334)
  5549. Note:    DPMI host sends exception to current client's handler
  5550. SeeAlso: AX=0203h,AX=0210h,AX=0213h
  5551. --------E-310213-----------------------------
  5552. INT 31 P - DPMI 1.0+ - SET REAL MODE EXTENDED PROCESSOR EXCEPTION HANDLER
  5553.     AX = 0213h
  5554.     BL = exception or fault number (00h-1Fh)
  5555.     CX:(E)DX = exception handler selector:offset
  5556. Return: CF clear if successful
  5557.     CF set on error
  5558.         AX = error code (8021h,8022h) (see #2334)
  5559. Notes:    specifies address of protected-mode handler for real-mode exception
  5560.     DPMI host performs a switch to protected mode, reflects the exception
  5561.       to the virtual machine's primary client, and returns to real mode
  5562.       on the handler's completion
  5563. SeeAlso: AX=0203h,AX=0211h,AX=0212h
  5564. --------E-310300-----------------------------
  5565. INT 31 P - DPMI 0.9+ - SIMULATE REAL MODE INTERRUPT
  5566.     AX = 0300h
  5567.     BL = interrupt number
  5568.     BH = flags
  5569.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5570.             reserved, must be 0 (DPMI 1.0+)
  5571.         others: reserved, must be 0
  5572.     CX = number of words to copy from protected mode to real mode stack
  5573.     ES:(E)DI = selector:offset of real mode call structure (see #2339)
  5574. Return: CF clear if successful
  5575.         real mode call structure modified (all fields except SS:SP, CS:IP
  5576.           filled with return values from real mode interrupt)
  5577.     CF set on error
  5578.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2334)
  5579.     protected mode stack unchanged
  5580. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5581.     CS:IP in the real mode call structure is ignored for this call,
  5582.       instead, the indicated interrupt vector is used for the address
  5583.     the flags in the call structure are pushed on the real mode stack to
  5584.       form an interrupt stack frame, and the trace and interrupt flags are
  5585.       clear on entry to the handler
  5586.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5587.     the real mode handler must return with the stack in the same state as
  5588.       it was on being called
  5589. SeeAlso: AX=0302h,AX=FF01h,INT 21/AX=2511h,INT 21/AH=E3h"OS/286"
  5590. SeeAlso: INT 2C/AX=0026h,INT 2F/AX=FB42h/BX=000Dh
  5591.  
  5592. Format of DPMI real mode call structure:
  5593. Offset    Size    Description    (Table 2339)
  5594.  00h    DWORD    EDI
  5595.  04h    DWORD    ESI
  5596.  08h    DWORD    EBP
  5597.  0Ch    DWORD    reserved (00h)
  5598.  10h    DWORD    EBX
  5599.  14h    DWORD    EDX
  5600.  18h    DWORD    ECX
  5601.  1Ch    DWORD    EAX
  5602.  20h    WORD    flags
  5603.  22h    WORD    ES
  5604.  24h    WORD    DS
  5605.  26h    WORD    FS
  5606.  28h    WORD    GS
  5607.  2Ah    WORD    IP
  5608.  2Ch    WORD    CS
  5609.  2Eh    WORD    SP
  5610.  30h    WORD    SS
  5611. --------E-310301-----------------------------
  5612. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH FAR RETURN FRAME
  5613.     AX = 0301h
  5614.     BH = flags
  5615.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5616.             reserved, must be 0 (DPMI 1.0+)
  5617.         others: reserved must be 0
  5618.     CX = number of words to copy from protected mode to real mode stack
  5619.     ES:(E)DI = selector:offset of real mode call structure
  5620.           (see #2339 at INT 31/AX=0300h)
  5621. Return: CF clear if successful
  5622.         real mode call structure modified (all fields except SS:SP, CS:IP
  5623.           filled with return values from real mode interrupt)
  5624.     CF set on error
  5625.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2334)
  5626.     protected mode stack unchanged
  5627. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5628.     the real mode procedure must exit with a FAR return
  5629.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5630.     the real mode handler must return with the stack in the same state as
  5631.       it was on being called
  5632. SeeAlso: AX=0300h,AX=0302h,AX=FF02h,INT 21/AX=250Eh,INT 21/AH=E1h"OS/286"
  5633. SeeAlso: INT 2C/AX=0025h
  5634. --------E-310302-----------------------------
  5635. INT 31 P - DPMI 0.9+ - CALL REAL MODE PROCEDURE WITH IRET FRAME
  5636.     AX = 0302h
  5637.     BH = flags
  5638.         bit 0: reset the interrupt controller and A20 line (DPMI 0.9)
  5639.             reserved, must be 0 (DPMI 1.0+)
  5640.         others: reserved, must be 0
  5641.     CX = number of words to copy from protected mode to real mode stack
  5642.     ES:(E)DI = selector:offset of real mode call structure
  5643.           (see #2339 at INT 31/AX=0300h)
  5644. Return: CF clear if successful
  5645.         real mode call structure modified (all fields except SS:SP, CS:IP
  5646.           filled with return values from real mode interrupt)
  5647.     CF set on error
  5648.         AX = error code (DPMI 1.0+) (8012h,8013h,8014h,8021h)(see #2334)
  5649.     protected mode stack unchanged
  5650. Notes:    16-bit programs use ES:DI as pointer, 32-bit programs use ES:EDI
  5651.     the flags in the call structure are pushed on the real mode stack to
  5652.       form an interrupt stack frame, and the trace and interrupt flags are
  5653.       clear on entry to the handler
  5654.     the real mode procedure must exit with an IRET
  5655.     DPMI will provide a small (30 words) real mode stack if SS:SP is zero
  5656.     the real mode handler must return with the stack in the same state as
  5657.       it was on being called
  5658. SeeAlso: AX=0300h
  5659. --------E-310303-----------------------------
  5660. INT 31 P - DPMI 0.9+ - ALLOCATE REAL MODE CALLBACK ADDRESS
  5661.     AX = 0303h
  5662.     DS:(E)SI = selector:offset of procedure to call
  5663.     ES:(E)DI = selector:offset of real mode call structure (see #2339)
  5664. Return: CF clear if successful
  5665.         CX:DX = segment:offset of real mode call address (see #2340)
  5666.     CF set on error
  5667.         AX = error code (DPMI 1.0+) (8015h) (see #2334)
  5668. Notes:    the real mode call structure is static, causing reentrancy problems;
  5669.       its contents are only valid at the time of a callback
  5670.     the called procedure must modify the real mode CS:IP before returning
  5671.     values are returned to real mode by modifying the real mode call struc
  5672.     DPMI hosts must provide at least 16 callbacks per client
  5673.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  5674.       not support this function
  5675. SeeAlso: AX=0304h,AX=0C00h
  5676.  
  5677. (Table 2340)
  5678. Values DPMI real-mode callback procedure is called with:
  5679.     DS:(E)SI = selector:offset of real mode SS:SP
  5680.     ES:(E)DI = selector:offset of real mode call structure
  5681.     SS:(E)SP = locked protected mode API stack
  5682.     interrupts disabled
  5683. Return: (with IRET)
  5684.     ES:(E)DI = selector:offset of real mode call structure to restore
  5685. --------E-310304-----------------------------
  5686. INT 31 P - DPMI 0.9+ - FREE REAL MODE CALLBACK ADDRESS
  5687.     AX = 0304h
  5688.     CX:DX = real mode callback address
  5689. Return: CF clear if successful
  5690.     CF set on error
  5691.         AX = error code (DPMI 1.0+) (8024h) (see #2334)
  5692. Note:    the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 does
  5693.       not support this function
  5694. SeeAlso: AX=0303h
  5695. --------E-310305-----------------------------
  5696. INT 31 P - DPMI 0.9+ - GET STATE SAVE/RESTORE ADDRESSES
  5697.     AX = 0305h
  5698. Return: CF clear
  5699.     AX = size in bytes of state buffer
  5700.     BX:CX = real mode address of procedure to save/restore state
  5701.     SI:(E)DI = protected mode procedure to save/restore state (see #2341)
  5702. Notes:    the buffer size will be zero if it is not necessary to preserve state
  5703.     16-bit programs should call SI:DI, 32-bit programs should call SI:EDI
  5704.     this function is only needed if using the raw mode switch service
  5705. SeeAlso: AX=0306h
  5706.  
  5707. (Table 2341)
  5708. Call DPMI state-save procedures with:
  5709.     AL = direction
  5710.         00h save state
  5711.         01h restore state
  5712.     ES:(E)DI -> state buffer
  5713. Return: all registers preserved
  5714. --------E-310306-----------------------------
  5715. INT 31 P - DPMI 0.9+ - GET RAW MODE SWITCH ADDRESSES
  5716.     AX = 0306h
  5717. Return: CF clear
  5718.     BX:CX -> procedure to switch from real to protected mode (see #2342)
  5719.     SI:(E)DI -> procedure to switch from protected to real mode
  5720. Notes:    16-bit programs should jump to SI:DI, 32-bit programs should use SI:EDI
  5721.     the caller must save and restore the state of the task with AX=0305h
  5722.     not supported by MS Windows 3.0 in Standard mode
  5723. SeeAlso: AX=0305h
  5724.  
  5725. (Table 2342)
  5726. Values to JUMP at mode-switch procedures with:
  5727.     AX = new DS
  5728.     CX = new ES
  5729.     DX = new SS
  5730.     (E)BX = new (E)SP
  5731.     SI:(E)DI = new CS:(E)IP
  5732. Notes:    BP/EBP is preserved across the call, but AX/EAX, BX/EBX, CX/ECX,
  5733.       DX/EDX, SI/ESI, and DI/EDI will be undefined; FS and GS will be 0000h
  5734.     interrupts will stay disabled during the entire mode switch if they
  5735.       are disabled on entry to the mode-switch procedure
  5736. --------E-310400-----------------------------
  5737. INT 31 P - DPMI 0.9+ - GET DPMI VERSION
  5738.     AX = 0400h
  5739. Return: CF clear
  5740.     AH = major version of DPMI spec supported
  5741.     AL = two-digit minor version of DPMI spec supported
  5742.     BX = DPMI host flags (see #2343)
  5743.     CL = processor type (02h=80286, 03h=80386, 04h=80486)
  5744.     DH = curr value of virtual master interrupt controller base interrupt
  5745.     DL = curr value of virtual slave interrupt controller base interrupt
  5746. BUG:    Windows NT versions from the March 1993 beta to at least the Final
  5747.       release with fixes to CSD002 report version 0090h (0.144); this has
  5748.       reportedly been corrected in the Windows NT 3.5 beta
  5749. SeeAlso: AX=0401h,INT 21/AX=250Ch,INT 2F/AX=1687h,INT 67/AX=DE0Ah
  5750.  
  5751. Bitfields for DPMI host flags:
  5752. Bit(s)    Description    (Table 2343)
  5753.  0    running under an 80386 (32-bit) implementation
  5754.  1    processor returns to real mode for reflected interrupts instead of V86
  5755.       mode
  5756.  2    virtual memory supported
  5757.  3    reserved (undefined)
  5758.  4-15    reserved (zero)
  5759. --------E-310401-----------------------------
  5760. INT 31 P - DPMI 1.0+ - GET DPMI CAPABILITIES
  5761.     AX = 0401h
  5762.     ES:(E)DI -> 128-byte buffer for host description (see #2344)
  5763. Return: CF clear if successful
  5764.         AX = capabilities (see #2345)
  5765.         CX = reserved (00h)
  5766.         DX = reserved (00h)
  5767.         buffer filled
  5768.     CF set on error (DPMI 0.9 only)
  5769. SeeAlso: AX=0400h
  5770.  
  5771. Format of DPMI host description:
  5772. Offset    Size    Description    (Table 2344)
  5773.  00h    BYTE    host major version number
  5774.  01h    BYTE    host minor version number
  5775.  02h 126 BYTEs    ASCIZ host vendor name
  5776.  
  5777. Bitfields for DPMI capabilities:
  5778. Bit(s)    Description    (Table 2345)
  5779.  0    paged accessed/dirty supported (see AX=0506h,AX=0507h)
  5780.  1    exceptions restartability supported
  5781.  2    device mapping supported (see AX=0508h)
  5782.  3    conventional memory mapping supported (see AX=0509h)
  5783.  4    demand zero-fill supported
  5784.  5    write-protect client capability supported
  5785.  6    write-protect host capability supported
  5786.  7-15    reserved
  5787. --------E-310500-----------------------------
  5788. INT 31 P - DPMI 0.9+ - GET FREE MEMORY INFORMATION
  5789.     AX = 0500h
  5790.     ES:(E)DI -> buffer for memory information (see #2346)
  5791. Return: CF clear
  5792. Notes:    16-bit programs use ES:DI, 32-bit programs use ES:EDI
  5793.     this function must be considered advisory because other applications
  5794.       may affect the results at any time after the call
  5795.     fields not supported by the DPMI implementation are filled with
  5796.       FFFFFFFFh
  5797.     DPMI 1.0+ supports this function solely for backward compatibility; use
  5798.       AX=050Bh instead
  5799.     the limited DPMI host built into Phar Lap's 286|DOS-Extender v2.5 only
  5800.       returns the first field in the memory information record
  5801. SeeAlso: AX=0501h,AX=050Bh,AX=0604h
  5802.  
  5803. Format of DPMI memory information:
  5804. Offset    Size    Description    (Table 2346)
  5805.  00h    DWORD    largest available block in bytes
  5806.  04h    DWORD    maximum unlocked page allocation
  5807.  08h    DWORD    maximum locked page allocation
  5808.  0Ch    DWORD    total linear address space in pages
  5809.  10h    DWORD    total unlocked pages
  5810.  14h    DWORD    free pages
  5811.  18h    DWORD    total physical pages
  5812.  1Ch    DWORD    free linear address space in pages
  5813.  20h    DWORD    size of paging file/partition in pages
  5814.  24h 12 BYTEs    reserved
  5815. --------E-310501-----------------------------
  5816. INT 31 P - DPMI 0.9+ - ALLOCATE MEMORY BLOCK
  5817.     AX = 0501h
  5818.     BX:CX = size in bytes
  5819. Return: CF clear if successful
  5820.         BX:CX = linear address of block
  5821.         SI:DI = memory block handle for resizing and freeing block
  5822.     CF set on error
  5823.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h)(see #2334)
  5824. Notes:    no selectors are allocated
  5825.     the memory block is allocated unlocked (can be locked with AX=0600h)
  5826.     allocations are often page granular (see AX=0604h)
  5827.     under MS Windows 3.10 Enhanced mode with paging enabled, it is possible
  5828.       for this function to fail even if AX=0500h indicates that enough
  5829.       memory is available
  5830. SeeAlso: AX=0000h,AX=0100h,AX=0500h,AX=0502h,AX=0503h,AX=0504h,AX=0D00h
  5831. SeeAlso: INT 2F/AX=FB42h/BX=0002h
  5832. --------E-310502-----------------------------
  5833. INT 31 P - DPMI 0.9+ - FREE MEMORY BLOCK
  5834.     AX = 0502h
  5835.     SI:DI = handle of memory block
  5836. Return: CF clear if successful
  5837.     CF set on error
  5838.         AX = error code (DPMI 1.0+) (8023h) (see #2334)
  5839. Note:    any selectors allocated for the memory block must also be freed,
  5840.       preferably before freeing the memory block
  5841. SeeAlso: AX=0001h,AX=0101h,AX=0501h,AX=0D01h
  5842. --------E-310503-----------------------------
  5843. INT 31 P - DPMI 0.9+ - RESIZE MEMORY BLOCK
  5844.     AX = 0503h
  5845.     BX:CX = new size in bytes (nonzero)
  5846.     SI:DI = handle of memory block
  5847. Return: CF clear if successful
  5848.         BX:CX = new linear address
  5849.         SI:DI = new handle of memory block
  5850.     CF set on error
  5851.         AX = error code (DPMI 1.0+) (8012h-8014h,8016h,8021h,8023h)
  5852.         (see #2334)
  5853. Notes:    any selectors pointing at the block must be updated
  5854.     the previous memory block handle becomes invalid
  5855.     an error is returned if the new size is 0
  5856. SeeAlso: AX=0102h,AX=0501h,AX=0505h
  5857. --------E-310504-----------------------------
  5858. INT 31 P - DPMI 1.0+ - ALLOCATE LINEAR MEMORY BLOCK
  5859.     AX = 0504h
  5860.     EBX = page-aligned linear address of memory block (00000000h if any
  5861.           address is acceptable)
  5862.     ECX = size in bytes (nonzero)
  5863.     EDX = flags
  5864.         bit 0: set to create committed pages instead of uncommitted pages
  5865.         bits 1-31 reserved (0)
  5866. Return: CF clear if successful
  5867.         EBX = linear address of memory block
  5868.         ESI = memory block handle
  5869.     CF set on error
  5870.         AX = error code (8001h,8012h-8014h,8016h,8021h,8025h)(see #2334)
  5871. Note:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5872. SeeAlso: AX=0501h,AX=0505h
  5873. --------E-310505-----------------------------
  5874. INT 31 P - DPMI 1.0+ - RESIZE LINEAR MEMORY BLOCK
  5875.     AX = 0505h
  5876.     ESI = memory block handle
  5877.     ECX = new size in bytes (nonzero)
  5878.     EDX = flags
  5879.         bit 0: create committed pages rather than uncommitted pages
  5880.         bit 1: segment descriptor update required
  5881.         ES:EBX -> buffer containing array of WORDs with selectors
  5882.         EDI = number of selectors in array
  5883.         bits 2-31 reserved (0)
  5884. Return: CF clear if successful
  5885.         EBX = new linear base address
  5886.         ESI = new memory block handle
  5887.     CF set on error
  5888.         AX = error code (8001h,8012h-8014h,8016h,8021h,8023h)(see #2334)
  5889. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5890.     the old memory block handle becomes invalid
  5891.     if EDX bit 1 set and the block's base address is changed, DPMI updates
  5892.       all descriptors for selectors in the update buffer which fall within
  5893.       the memory block
  5894. SeeAlso: AX=0503h,AX=0504h
  5895. --------E-310506-----------------------------
  5896. INT 31 P - DPMI 1.0+ - GET PAGE ATTRIBUTES
  5897.     AX = 0506h
  5898.     ESI = memory block handle
  5899.     EBX = offset in memory block of first page
  5900.     ECX = number of pages
  5901.     ES:EDX -> array of WORDs to hold page attributes (see #2347)
  5902. Return: CF clear if successful
  5903.         buffer filled
  5904.     CF set on error
  5905.         AX = error code (8001h,8023h,8025h) (see #2334)
  5906. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5907.     if EBX is not page-aligned, it will be rounded down
  5908. SeeAlso: AX=0504h,AX=0507h,INT 21/AX=251Dh,INT 21/AX=EB00h
  5909.  
  5910. Bitfields for DPMI page attribute word:
  5911. Bit(s)    Description    (Table 2347)
  5912.  0-2    page type
  5913.     000 uncommitted
  5914.     001 committed
  5915.     010 mapped (see AX=0508h,AX=0509h)
  5916.     other currently unused
  5917.  3    page is read/write rather than read-only
  5918.  4    accessed/dirty bits supplied in bits 5 and 6
  5919.  5    page has been accessed (only valid if bit 4 set)
  5920.  6    page has been written (only valid if bit 4 set)
  5921.  7-15    reserved (0)
  5922. --------E-310507-----------------------------
  5923. INT 31 P - DPMI 1.0+ - MODIFY PAGE ATTRIBUTES
  5924.     AX = 0507h
  5925.     ESI = memory block handle
  5926.     EBX = offset in memory block of first page
  5927.     ECX = number of pages
  5928.     ES:EDX -> array of WORDs with new page attributes (see #2347)
  5929. Return: CF clear if successful
  5930.     CF set on error
  5931.         AX = error code (8001h,8002h,8013h,8014h,8021h,8023h,8025h)
  5932.         (see #2334)
  5933.         ECX = number of pages which have been set
  5934. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5935.     if EBX is not page-aligned, it will be rounded down
  5936. SeeAlso: AX=0504h,AX=0506h,INT 21/AX=251Eh
  5937. --------E-310508-----------------------------
  5938. INT 31 P - DPMI 1.0+ - MAP DEVICE IN MEMORY BLOCK
  5939.     AX = 0508h
  5940.     ESI = memory block handle
  5941.     EBX = page-aligned offset within memory block of page(s) to be mapped
  5942.     ECX = number of pages to map
  5943.     EDX = page-aligned physical address of device
  5944. Return: CF clear if successful
  5945.     CF set on error
  5946.         AX = error code (8001h,8003h,8023h,8025h) (see #2334)
  5947. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5948.     support of this function is optional; hosts are also allowed to support
  5949.       the function for some devices but not others
  5950. SeeAlso: AX=0504h,AX=0509h,AX=0800h,AX=0801h
  5951. --------E-310509-----------------------------
  5952. INT 31 P - DPMI 1.0+ - MAP CONVENTIONAL MEMORY IN MEMORY BLOCK
  5953.     AX = 0509h
  5954.     ESI = memory block handle
  5955.     EBX = page-aligned offset within memory block of page(s) to map
  5956.     ECX = number of pages to map
  5957.     EDX = page-aligned linear address of conventional (below 1M) memory
  5958. Return: CF clear if successful
  5959.     CF set on error
  5960.         AX = error code (8001h,8003h,8023h,8025h) (see #2334)
  5961. Notes:    only supported by 32-bit DPMI hosts, but may be used by 16-bit clients
  5962.     support of this function is optional
  5963. SeeAlso: AX=0504h,AX=0508h,AX=0801h
  5964. --------E-31050A-----------------------------
  5965. INT 31 P - DPMI 1.0+ - GET MEMORY BLOCK SIZE AND BASE
  5966.     AX = 050Ah
  5967.     SI:DI = memory block handle
  5968. Return: CF clear if successful
  5969.         SI:DI = size in bytes
  5970.         BX:CX = base address
  5971.     CF set on error
  5972.         AX = error code (8023h) (see #2334)
  5973. SeeAlso: AX=0501h,AX=0504h
  5974. --------E-31050B-----------------------------
  5975. INT 31 P - DPMI 1.0+ - GET MEMORY INFORMATION
  5976.     AX = 050Bh
  5977.     ES:(E)DI -> 128-byte buffer for memory information (see #2348)
  5978. Return: CF clear if successful
  5979.     CF set on error (DPMI 0.9 only)
  5980. Note:    16-bit programs use ES:DI, 32-bit programs must use ES:EDI
  5981. SeeAlso: AX=0500h
  5982.  
  5983. Format of DPMI memory information:
  5984. Offset    Size    Description    (Table 2348)
  5985.  00h    DWORD    total allocated bytes of physical memory controlled by host
  5986.  04h    DWORD    total allocated bytes of virtual memory controlled by host
  5987.  08h    DWORD    total available bytes of virtual memory controlled by host
  5988.  0Ch    DWORD    total allocated bytes of virtual memory for curr virtual mach
  5989.  10h    DWORD    total available bytes of virtual memory for curr virtual mach
  5990.  14h    DWORD    total allocated bytes of virtual memory for current client
  5991.  18h    DWORD    total available bytes of virtual memory for current client
  5992.  1Ch    DWORD    total locked bytes for current client
  5993.  20h    DWORD    maximum locked bytes for current client
  5994.  24h    DWORD    highest linear address available to current client
  5995.  28h    DWORD    largest available memory block in bytes
  5996.  2Ch    DWORD    minimum allocation unit in bytes
  5997.  30h    DWORD    allocation alignment unit size in bytes
  5998.  34h 76 BYTEs    reserved (00h)
  5999. --------E-310600-----------------------------
  6000. INT 31 P - DPMI 0.9+ - LOCK LINEAR REGION
  6001.     AX = 0600h
  6002.     BX:CX = starting linear address
  6003.     SI:DI = size of region in bytes
  6004. Return: CF clear if successful
  6005.     CF set on error
  6006.         none of the memory is locked
  6007.         AX = error code (DPMI 1.0+) (8013h,8017h,8025h) (see #2334)
  6008. Notes:    pages at beginning and end will be locked if the region overlaps them
  6009.     may be called multiple times for a given page; the DPMI host keeps a
  6010.       lock count for each page
  6011. SeeAlso: AX=0004h,AX=0601h,INT 21/AX=251Ah,INT 21/AX=EB06h
  6012. --------E-310601-----------------------------
  6013. INT 31 P - DPMI 0.9+ - UNLOCK LINEAR REGION
  6014.     AX = 0601h
  6015.     BX:CX = starting linear address
  6016.     SI:DI = size of region in bytes
  6017. Return: CF clear if successful
  6018.     CF set on error
  6019.         none of the memory is unlocked
  6020.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2334)
  6021. Notes:    pages at beginning and end will be unlocked if the region overlaps them
  6022.     memory whose lock count has not reached zero remains locked
  6023. SeeAlso: AX=0005h,AX=0600h,INT 21/AX=251Bh,INT 21/AX=EB07h
  6024. --------E-310602-----------------------------
  6025. INT 31 P - DPMI 0.9+ - MARK REAL MODE REGION AS PAGEABLE
  6026.     AX = 0602h
  6027.     BX:CX = starting linear address
  6028.     SI:DI = size of region in bytes
  6029. Return: CF clear if successful
  6030.     CF set on error
  6031.         none of the memory is made pageable
  6032.         AX = error code (DPMI 1.0+) (8002h,8025h) (see #2334)
  6033. Notes:    must relock all unlocked real mode memory before terminating process
  6034.       for DPMI 0.9; DPMI 1.0+ automatically relocks real mode memory
  6035.     pages at beginning and end will be unlocked if the region overlaps them
  6036.     pageability of real mode pages is binary, not a count
  6037. SeeAlso: AX=0600h,AX=0603h
  6038. --------E-310603-----------------------------
  6039. INT 31 P - DPMI 0.9+ - RELOCK REAL MODE REGION
  6040.     AX = 0603h
  6041.     BX:CX = starting linear address
  6042.     SI:DI = size of region in bytes
  6043. Return: CF clear if successful
  6044.     CF set on error
  6045.         none of the memory is relocked
  6046.         AX = error code (DPMI 1.0+) (8002h,8013h,8025h) (see #2334)
  6047. Notes:    pages at beginning and end will be relocked if the region overlaps them
  6048.     pageability of real mode pages is binary, not a count
  6049. SeeAlso: AX=0602h
  6050. --------E-310604-----------------------------
  6051. INT 31 P - DPMI 0.9+ - GET PAGE SIZE
  6052.     AX = 0604h
  6053. Return: CF clear if successful
  6054.         BX:CX = page size in bytes
  6055.     CF set on error
  6056.         AX = error code (DPMI 1.0+) (see also #2334)
  6057.         8001h unsupported, 16-bit host
  6058. BUG:    the Borland C++ 3.1 DPMILOAD returns with CF clear but BX and CX
  6059.       unchanged
  6060. --------E-310700-----------------------------
  6061. INT 31 Pu - DPMI 0.9+ - MARK PAGES AS PAGING CANDIDATES
  6062.     AX = 0700h
  6063.     BX:CX = starting linear page number
  6064.     SI:DI = number of pages to mark as paging candidates
  6065. Return: ???
  6066. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  6067.       specification, this function is called by MS Windows TASKMAN,
  6068.       PROGMAN, and KERNEL
  6069. SeeAlso: AX=0701h,AX=0702h
  6070. --------E-310701-----------------------------
  6071. INT 31 Pu - DPMI 0.9+ - DISCARD PAGES
  6072.     AX = 0701h
  6073.     BX:CX = starting linear page number
  6074.     SI:DI = number of pages to discard
  6075. Return: ???
  6076. Note:    although marked as reserved in versions 0.9 and 1.0 of the DPMI
  6077.       specification, this function is called by MS Windows TASKMAN,
  6078.       PROGMAN, and KERNEL
  6079. SeeAlso: AX=0700h,AX=0703h
  6080. --------E-310702-----------------------------
  6081. INT 31 P - DPMI 0.9+ - MARK PAGE AS DEMAND PAGING CANDIDATE
  6082.     AX = 0702h
  6083.     BX:CX = starting linear address
  6084.     SI:DI = number of bytes to mark as paging candidates
  6085. Return: CF clear if successful
  6086.     CF set on error
  6087.         AX = error code (DPMI 1.0+) (8025h) (see #2334)
  6088. Notes:    this function is advisory, and does not force immediate paging
  6089.     partial pages will not be discarded
  6090. SeeAlso: AX=0700h,AX=0703h
  6091. --------E-310703-----------------------------
  6092. INT 31 P - DPMI 0.9+ - DISCARD PAGE CONTENTS
  6093.     AX = 0703h
  6094.     BX:CX = starting linear address
  6095.     SI:DI = number of bytes to mark as discarded
  6096. Return: CF clear if successful
  6097.     CF set on error
  6098.         AX = error code (DPMI 1.0+) (8025h) (see #2334)
  6099. Notes:    this function is advisory, and may be ignored by DPMI implementations
  6100.     partial pages will not be discarded
  6101. SeeAlso: AX=0701h,AX=0702h
  6102. --------E-310800-----------------------------
  6103. INT 31 P - DPMI 0.9+ - PHYSICAL ADDRESS MAPPING
  6104.     AX = 0800h
  6105.     BX:CX = physical address (should be above 1 MB)
  6106.     SI:DI = size in bytes
  6107. Return: CF clear if successful
  6108.         BX:CX = linear address which maps the requested physical memory
  6109.     CF set on error
  6110.         AX = error code (DPMI 1.0+) (8003h,8021h) (see #2334)
  6111. Notes:    implementations may refuse this call because it can circumvent protects
  6112.     the caller must build an appropriate selector for the memory
  6113.     do not use for memory mapped in the first megabyte
  6114. SeeAlso: AX=0002h,AX=0508h,AX=0509h,AX=0801h,INT 21/AX=250Ah,INT 21/AX=EB05h
  6115. --------E-310801-----------------------------
  6116. INT 31 P - DPMI 1.0+ - FREE PHYSICAL ADDRESS MAPPING
  6117.     AX = 0801h
  6118.     BX:CX = linear address returned by AX=0800h
  6119. Return: CF clear if successful
  6120.     CF set on error
  6121.         AX = error code (8025h) (see #2334)
  6122. Note:    should be called at end of access to device mapped with AX=0800h
  6123. SeeAlso: AX=0508h,AX=0509h,AX=0800h,INT 21/AX=EB03h
  6124. --------E-310900-----------------------------
  6125. INT 31 P - DPMI 0.9+ - GET AND DISABLE VIRTUAL INTERRUPT STATE
  6126.     AX = 0900h
  6127. Return: CF clear
  6128.     virtual interrupts disabled
  6129.     AL = previous interrupt state (00h disabled, 01h enabled)
  6130.     AH preserved
  6131. Notes:    the previous state may be restored simply by executing another INT 31
  6132.     a CLI instruction may be used if the previous state is unimportant,
  6133.       but should be assumed to be very slow due to trapping by the host
  6134. SeeAlso: AX=0901h,AX=0902h
  6135. --------E-310901-----------------------------
  6136. INT 31 P - DPMI 0.9+ - GET AND ENABLE VIRTUAL INTERRUPT STATE
  6137.     AX = 0901h
  6138. Return: CF clear
  6139.     virtual interrupts enabled
  6140.     AL = previous interrupt state (00h disabled, 01h enabled)
  6141.     AH preserved
  6142. Notes:    the previous state may be restored simply by executing another INT 31
  6143.     a STI instruction may be used if the previous state is unimportant,
  6144.       but should be assumed to be very slow due to trapping by the host
  6145. SeeAlso: AX=0900h,AX=0902h
  6146. --------E-310902-----------------------------
  6147. INT 31 P - DPMI 0.9+ - GET VIRTUAL INTERRUPT STATE
  6148.     AX = 0902h
  6149. Return: CF clear
  6150.     AL = current interrupt state (00h disabled, 01h enabled)
  6151. Note:    should be used rather than PUSHF because that instruction yields the
  6152.       physical interrupt state rather than the per-client virtualized
  6153.       interrupt flag
  6154. SeeAlso: AX=0900h,AX=0901h
  6155. --------E-310A00-----------------------------
  6156. INT 31 P - DPMI 0.9+ - GET VENDOR SPECIFIC API ENTRY POINT
  6157.     AX = 0A00h
  6158.     DS:(E)SI -> case-sensitive ASCIZ vendor name or identifier
  6159. Return: CF clear if successful
  6160.         ES:(E)DI -> FAR extended API entry point
  6161.         DS, FS, GS, EAX, EBX, ECX, EDX, ESI, EBP destroyed
  6162.     CF set on error
  6163.         AX = error code (DPMI 1.0+) (8001h) (see #2334)
  6164. Notes:    extended API parameters are vendor-specific
  6165.     DPMI 1.0+ supports this function solely for backward compatibility; use
  6166.       INT 2F/AX=168Ah instead
  6167.     this function is not supported by MS Windows 3.10, BC++ 3.1 DPMILOAD,
  6168.       or QDPMI v1.0x; use INT 2F/AX=168Ah instead.    It is supported by
  6169.       386MAX v7.01.
  6170. SeeAlso: INT 2F/AX=168Ah
  6171. --------E-310B00-----------------------------
  6172. INT 31 P - DPMI 0.9+ - SET DEBUG WATCHPOINT
  6173.     AX = 0B00h
  6174.     BX:CX = linear address
  6175.     DL = size (1,2,4 bytes)
  6176.     DH = type (00h execute, 01h write, 02h read/write)
  6177. Return: CF clear if successful
  6178.         BX = watchpoint handle
  6179.     CF set on error
  6180.         AX = error code (DPMI 1.0+) (8016h,8021h,8025h) (see #2334)
  6181. SeeAlso: AX=0212h,AX=0601h
  6182. --------E-310B01-----------------------------
  6183. INT 31 P - DPMI 0.9+ - CLEAR DEBUG WATCHPOINT
  6184.     AX = 0B01h
  6185.     BX = watchpoint handle
  6186. Return: CF clear if successful
  6187.     CF set on error
  6188.         AX = error code (DPMI 1.0+) (8023h) (see #2334)
  6189. Note:    the watchpoint handle is freed
  6190. SeeAlso: AX=0B00h
  6191. --------E-310B02-----------------------------
  6192. INT 31 P - DPMI 0.9+ - GET STATE OF DEBUG WATCHPOINT
  6193.     AX = 0B02h
  6194.     BX = watchpoint handle
  6195. Return: CF clear if successful
  6196.         AX = status flags
  6197.         bit 0: watch point has been executed since AX=0B00h or AX=0B03h
  6198.     CF set on error
  6199.         AX = error code (DPMI 1.0+) (8023h) (see #2334)
  6200. SeeAlso: AX=0B00h,AX=0B03h
  6201. --------E-310B03-----------------------------
  6202. INT 31 P - DPMI 0.9+ - RESET DEBUG WATCHPOINT
  6203.     AX = 0B03h
  6204.     BX = watchpoint handle
  6205. Return: CF clear if successful
  6206.     CF set on error
  6207.         AX = error code (DPMI 1.0+) (8023h) (see #2334)
  6208. SeeAlso: AX=0B02h
  6209. --------E-310C00-----------------------------
  6210. INT 31 P - DPMI 1.0+ - INSTALL RESIDENT HANDLER INIT CALLBACK
  6211.     AX = 0C00h
  6212.     ES:(E)DI -> resident service provider structure (see #2349)
  6213. Return: CF clear if successful
  6214.     CF set on error
  6215.         AX = error code (8015h,8021h,8025h) (see #2334 at AX=0000h)
  6216. Note:    calling this function declares an intent to provide resident
  6217.       protected mode services after terminating with AX=0C01h
  6218. SeeAlso: AX=0303h,AX=0C01h
  6219.  
  6220. Format of DPMI resident service provider structure:
  6221. Offset    Size    Description    (Table 2349)
  6222.  00h    QWORD    descriptor for 16-bit data segment
  6223.  08h    QWORD    descriptor for 16-bit code segment (zeros if not supported)
  6224.  10h    WORD    offset of 16-bit callback procedure
  6225.  12h  2 BYTEs    reserved
  6226.  14h    QWORD    descriptor for 32-bit data segment
  6227.  1Ch    QWORD    descriptor for 32-bit code segment (zeros if not supported)
  6228.  24h    DWORD    offset of 32-bit callback procedure
  6229. --------E-310C01-----------------------------
  6230. INT 31 P - DPMI 1.0+ - TERMINATE AND STAY RESIDENT
  6231.     AX = 0C01h
  6232.     BL = return code
  6233.     DX = number of paragraphs of DOS memory to reserve (0 or >= 6)
  6234. Return: never
  6235. Notes:    should only be used if the program will only provide services to
  6236.       other DPMI programs
  6237.     any protected mode memory remains allocated to the program unless
  6238.       explicitly freed before this call
  6239.     must first call AX=0C00h or program will simply be terminated
  6240. SeeAlso: AX=0C00h,INT 21/AH=31h
  6241. --------E-310D00-----------------------------
  6242. INT 31 P - DPMI 1.0+ - ALLOCATE SHARED MEMORY
  6243.     AX = 0D00h
  6244.     ES:(E)DI -> shared memory allocation request structure (see #2350)
  6245. Return: CF clear if successful
  6246.         request structure updated
  6247.     CF set on error
  6248.         AX = error code (8012h,8013h,8014h,8016h,8021h) (see #2334)
  6249. Note:    first 16 bytes of memory block will be initialized to zeros on the
  6250.       first allocation
  6251. SeeAlso: AX=0501h,AX=0D01h,AX=0D02h
  6252.  
  6253. Format of DPMI shared memory allocation request structure:
  6254. Offset    Size    Description    (Table 2350)
  6255.  00h    DWORD    requested length of shared memory block in bytes
  6256.  04h    DWORD    (ret) allocated length of block
  6257.  08h    DWORD    (ret) shared memory handle
  6258.  0Ch    DWORD    (ret) linear address of memory block
  6259.  10h    PWORD    selector:offset32 of ASCIZ name for memory block
  6260.         (name max 128 bytes)
  6261.  16h  2 BYTEs    reserved
  6262.  18h  4 BYTEs    reserved (00h)
  6263. --------E-310D01-----------------------------
  6264. INT 31 P - DPMI 1.0+ - FREE SHARED MEMORY
  6265.     AX = 0D01h
  6266.     SI:DI = shared memory block handle
  6267. Return: CF clear if successful
  6268.     CF set on error
  6269.         AX = error code (8023h) (see #2334)
  6270. Notes:    handle becomes invalid after this call
  6271.     DPMI maintains separate global and virtual machine use counts for each
  6272.       shared memory block; when the global use counts reaches zero, the
  6273.       block is finally destroyed
  6274. SeeAlso: AX=0502h,AX=0D00h
  6275. --------E-310D02-----------------------------
  6276. INT 31 P - DPMI 1.0+ - SERIALIZE SHARED MEMORY
  6277.     AX = 0D02h
  6278.     SI:DI = shared memory block handle
  6279.     DX = flags
  6280.         bit 0: return immediately rather than suspending if serialization
  6281.           unavailable
  6282.         bit 1: shared rather than exclusive serialization
  6283.         bits 2-15 reserved (0)
  6284. Return: CF clear if successful
  6285.     CF set on error
  6286.         AX = error code (8004h,8005h,8017h-8019h,8023h) (see #2334)
  6287. Notes:    an exclusive serialization blocks any other serialization attempts for
  6288.       the same block by another virtual machine; a shared serialization
  6289.       blocks attempts at exclusive serialization by another virtual machine
  6290.     hosts are not required to detect deadlock
  6291.     a client's interrupt handler can cancel a serialization call which
  6292.       caused it to block by calling AX=0D03h
  6293. SeeAlso: AX=0D00h,AX=0D03h
  6294. --------E-310D03-----------------------------
  6295. INT 31 P - DPMI 1.0+ - FREE SERIALIZATION ON SHARED MEMORY
  6296.     AX = 0D03h
  6297.     SI:DI = shared memory block handle
  6298.     DX = flags
  6299.         bit 0: release shared serialization rather than exclusive serialztn
  6300.         bit 1: free pending serialization
  6301.         bits 2-15 reserved (0)
  6302. Return: CF clear if successful
  6303.     CF set on error
  6304.         AX = error code (8002h,8023h) (see #2334 at AX=0000h)
  6305. SeeAlso: AX=0D00h,AX=0D02h
  6306. --------E-310E00-----------------------------
  6307. INT 31 P - DPMI 1.0+ - GET COPROCESSOR STATUS
  6308.     AX = 0E00h
  6309. Return: CF clear
  6310.     AX = coprocessor status (see #2351)
  6311. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  6312. SeeAlso: AX=0E01h
  6313.  
  6314. Bitfields for DPMI coprocessor status:
  6315. Bit(s)    Description    (Table 2351)
  6316.  0    numeric coprocessor enabled for current client
  6317.  1    client is emulating coprocessor
  6318.  2    numeric coprocessor is present
  6319.  3    host is emulating coprocessor instructions
  6320.  4-7    coprocessor type
  6321.     0000 none
  6322.     0010 80287
  6323.     0011 80387
  6324.     0100 80486 with numeric coprocessor
  6325.     other reserved
  6326.  8-15    not used
  6327. --------E-310E01-----------------------------
  6328. INT 31 P - DPMI 1.0+ - SET EMULATION
  6329.     AX = 0E01h
  6330.     BX = coprocessor flag bits (see #2352)
  6331. Return: CF clear if successful
  6332.     CF set on error
  6333.         AX = error code (8026h) (see #2334 at AX=0000h)
  6334. Note:    supported by 386MAX v6.01, which otherwise only supports DPMI 0.9
  6335. SeeAlso: AX=0E00h
  6336.  
  6337. Bitfields for DPMI coprocessor flags:
  6338. Bit(s)    Description    (Table 2352)
  6339.  0    enable numeric coprocessor for current client
  6340.  1    client will emulate coprocessor
  6341.  2-15    not used
  6342. --------E-3157-------------------------------
  6343. INT 31 - Netroom3 DPMI.EXE v3.00 - ???
  6344.     AH = 57h
  6345.     AL = subfunction (at least 02h,03h,04h,05h,07h,08h,09h,0Ah)
  6346.     ???
  6347. Return: ???
  6348. SeeAlso: INT 2C/AX=0000h"RM386"
  6349. --------E-315702-----------------------------
  6350. INT 31 - Netroom3 DPMI.EXE v3.00 - SWITCH TO PROTECTED MODE
  6351.     AX = 5702h
  6352.     DX = PSP segment of caller
  6353.     STACK: WORD    ???
  6354.            WORD    flags (bit 0 set if 32-bit program)
  6355. Return: as for DPMI mode-switch entry point (see #1950 at INT 2F/AX=1687h)
  6356. Note:    this function is called by the real-mode DPMI mode-switch entry point
  6357. SeeAlso: INT 2F/AX=1687h
  6358. --------E-31EE00------------------------
  6359. INT 31 - DOS32 v3.0+ - GET DOS32 VERSION AND SELECTOR VALUES
  6360.     AX = EE00h
  6361. Return: AL = minor version (BCD)
  6362.     AH = major version (BCD)
  6363.     DL = system type (1=raw DOS, 2=XMS, 4=VCPI, 8=DPMI)
  6364.     BX = selector of 4GB data segment with zero base address
  6365. Program: DOS32 is a 32 bit DOS extender by Adam Seychell.
  6366. SeeAlso: AX=EE02h
  6367. --------E-31EE02------------------------
  6368. INT 31 - DOS32 v3.0+ - GET DOS32 ADDRESS INFORMATION
  6369.     AX = EE02h
  6370. Return: AX = real-mode segment of temporary 8K buffer (v3.1+)
  6371.     EBX = 32bit linear address of the program segment
  6372.     EDX = Total size in bytes of the programs .EXE file after linking.
  6373.     ESI = offset address of PSP
  6374.     EDI = offset address of program environment
  6375.     ECX = offset address of the program's .EXE ASCIZ file name and path
  6376. SeeAlso: AX=EE00h,AX=EE20h
  6377. --------E-31EE10------------------------
  6378. INT 31 - DOS32 v3.2+ - SET UP A DOS32 LOADABLE LIBRARY
  6379.     AX = EE10h
  6380.     EDX -> library ASCIZ path\filename
  6381.     EBX = number of bytes to seek from beginning of file
  6382. Return: CF clear if successful
  6383.         EAX = size of memory block required to store library
  6384.         EBX = size of library file
  6385.     CF set on error
  6386.         AL = error code.
  6387.         01h error opening or reading file
  6388.         02h bad DOS32 library file
  6389. SeeAlso: AX=EE00h,AX=EE11h
  6390. --------E-31EE11------------------------
  6391. INT 31 - DOS32 v3.2+ - LOAD LIBRARY FILE
  6392.     AX = EE11h
  6393.     EDX -> near pointer of memory block to store library
  6394. Return: CF clear if successful
  6395.         EDX = near pointer to the dynamic library public
  6396.     CF set on error
  6397. Note:    must first successfuly call function AX=EE10h before calling this
  6398.       function
  6399. SeeAlso: AX=EE00h,AX=EE10h
  6400. --------E-31EE20------------------------
  6401. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH RETF STACK FRAME
  6402.     AX = EE20h
  6403.     ESI = offset of the real mode call back function
  6404. Return: CF clear if successful
  6405.         CX:DX = real mode address to call up to the protected mode
  6406.           procedure
  6407.     CF set on error
  6408. SeeAlso: AX=EE00h,AX=EE02h,AX=EE21h
  6409. --------E-31EE21------------------------
  6410. INT 31 - DOS32 v3.0+ - GET REAL MODE CALL BACK ADDRESS WITH IRET STACK FRAME
  6411.     AX = EE21h
  6412.     ESI = offset of the real mode call back function
  6413. Return: CF clear if successful
  6414.         CX:DX = real mode address to call up to the protected mode
  6415.           procedure
  6416.     CF set on error
  6417. SeeAlso: AX=EE20h
  6418. --------E-31EE30------------------------
  6419. INT 31 - DOS32 v3.0+ - TERMINATE AND STAY RESIDENT
  6420.     AX = EE30h
  6421. SeeAlso: AX=EE21h,AX=EE40h,INT 21/AH=31h
  6422. --------E-31EE40------------------------
  6423. INT 31 - DOS32 v3.0+ - UNDO PREVIOUS MEMORY ALLOCATION or DMA BUFFER
  6424.     AX = EE40h
  6425. Return: CF clear if successful
  6426.     CF set on error
  6427. SeeAlso: AX=EE41h,AX=EE42h
  6428. --------E-31EE41------------------------
  6429. INT 31 - DOS32 v3.0+ - ALLOCATE 16KB DMA BLOCK
  6430.     AX = EE41h
  6431. Return: CF clear if successful
  6432.         EBX -> 16KB DMA block (physical address)
  6433.         EDX -> 16KB DMA block (offset address)
  6434.     CF set on error
  6435. SeeAlso: AX=EE40h,AX=EE42h
  6436. --------E-31EE42------------------------
  6437. INT 31 - DOS32 v3.0+ - ALLOCATE MEMORY BLOCK
  6438.     AX = EE42h
  6439.     EDX = size in bytes
  6440. Return: CF clear if successful
  6441.         EAX = size in bytes
  6442.         EDX -> memory block
  6443.     CF set on error
  6444. Note:    size is rounded off to the next 4KB boundary
  6445. SeeAlso: AX=EE40h,AX=EE41h
  6446. --------E-31FF00-----------------------------
  6447. INT 31 P - CauseWay - "Info" - GET SYSTEM SELECTORS/FLAGS
  6448.     AX = FF00h
  6449. Return: AX = selector for flag address space (base 00000000h, limit 4GB)
  6450.     BX = selector for current PSP segment (limit 0100h)
  6451.     (E)CX = size of DOS transfer buffer (max 64K)
  6452.     DX = real-mode segment address of DOS transfer buffer
  6453.     ES:(E)SI = protected-mode address of DOS transfer buffer
  6454.     EDI = system flags (see #2353)
  6455. Program: CauseWay is a 386 DOS extender by Michael Devore and John Wildsmith
  6456.       for use with Watcom C++ or assembly language programs
  6457. Notes:    the entire transfer buffer can be addressed with a 16-bit offset in
  6458.       protected mode
  6459.     CauseWay always maps selector 0040h to the BIOS data segment at
  6460.       real-mode segment 0040h; when not running under a DPMI host, CauseWay
  6461.       also provides selectors A000h, B000h, and B800h mapped to video
  6462.       memory
  6463. SeeAlso: AX=FF25h
  6464.  
  6465. Bitfields for CauseWay system flags:
  6466. Bit(s)    Description    (Table 2353)
  6467.  0    32-bit code
  6468.  1    virtual memory manage enabled
  6469.  3-2    mode: 00 raw extended memory, 01 VCPI, 10 DPMI
  6470.  4    DPMI available
  6471.  5    VCPI available
  6472.  6    no memory managers
  6473.  7    application descriptor table type: 0 = GDT, 1 = LDT
  6474.  14-8    reserved
  6475.  15    debugging engine present
  6476. --------E-31FF01-----------------------------
  6477. INT 31 P - CauseWay - "IntXX" - SIMULATE REAL-MODE INTERRUPT
  6478.     AX = FF01h
  6479.     BL = interrupt number
  6480.     ES:(E)DI -> real-mode register list (see #2339 at AX=0300h)
  6481. Return: register list updated
  6482. Note:    CauseWay fills in the values for SS, SP, and FLAGS itself, and ignores
  6483.       the values specified for CS and IP
  6484. SeeAlso: AX=0300h,AX=FF02h
  6485. --------E-31FF02-----------------------------
  6486. INT 31 P - CauseWay - "FarCallReal" - SIMULATE REAL-MODE FAR CALL
  6487.     AX = FF02h
  6488.     ES:(E)DI -> real-mode register list (see #2339 at AX=0300h)
  6489. Return: register list updated
  6490. SeeAlso: AX=0301h,AX=FF01h
  6491. --------E-31FF03-----------------------------
  6492. INT 31 P - CauseWay - "GetSel" - ALLOCATE NEW SELECTOR
  6493.     AX = FF03h
  6494. Return: CF clear if successful
  6495.         BX = new selector
  6496.     CF set on error
  6497. Note:    the new selector is initialized with a base address of 000000h, a limit
  6498.       of 0000h, and attributes read/write expand-up data
  6499. SeeAlso: AX=FF04h,AX=FF05h,AX=FF06h
  6500. --------E-31FF04-----------------------------
  6501. INT 31 P - CauseWay - "RelSel" - RELEASE A SELECTOR
  6502.     AX = FF04h
  6503.     BX = selector
  6504. Return: CF clear if successful
  6505.     CF set on error
  6506. SeeAlso: AX=FF03h,AX=FF06h
  6507. --------E-31FF05-----------------------------
  6508. INT 31 P - CauseWay - "CodeSel" - CONVERT SELECTOR TO EXECUTABLE CODE SELECTOR
  6509.     AX = FF05h
  6510.     BX = selector
  6511.     CL = default operation size (00h = 16-bit, 01h = 32-bit)
  6512. Return: CF clear if successful
  6513.     CF set on error
  6514. SeeAlso: AX=FF03h
  6515. --------E-31FF06-----------------------------
  6516. INT 31 P - CauseWay - "AliasSel" - CREATE READ/WRITE DATA ALIAS SELECTOR
  6517.     AX = FF06h
  6518.     BX = original selector
  6519. Return: CF clear if successful
  6520.         AX = new data selector aliasing original selector
  6521.     CF set on error
  6522. SeeAlso: AX=FF03h,AX=FF04h
  6523. --------E-31FF07-----------------------------
  6524. INT 31 P - CauseWay - "GetSelDet" - GET SELECTOR BASE AND LIMIT
  6525.     AX = FF07h
  6526.     BX = selector
  6527. Return: CF clear if successful
  6528.         CX:DX = base address
  6529.         SI:DI = limit (bytes)
  6530.     CF set on error
  6531. SeeAlso: AX=FF08h,AX=FF09h
  6532. --------E-31FF08-----------------------------
  6533. INT 31 P - CauseWay - "GetSelDet32" - GET SELECTOR BASE AND LIMIT (32-bit)
  6534.     AX = FF08h
  6535. Return: CF clear if successful
  6536.         EDX = base address
  6537.         ECX = limit (bytes)
  6538.     CF set on error
  6539. SeeAlso: AX=FF07h,AX=FF0Ah
  6540. --------E-31FF09-----------------------------
  6541. INT 31 P - CauseWay - "SetSelDet" - SET SELECTOR BASE AND LIMIT
  6542.     AX = FF09h
  6543.     BX = selector
  6544.     CX:DX = new base address
  6545.     SI:DI = new byte-granular limit
  6546. Return: CF clear if successful
  6547.     CF set on error
  6548. SeeAlso: AX=FF07h,AX=FF0Ah
  6549. --------E-31FF0A-----------------------------
  6550. INT 31 P - CauseWay - "SetSelDet32" - SET SELECTOR BASE AND LIMIT (32-bit)
  6551.     AX = FF0Ah
  6552.     BX = selector
  6553.     EDX = new base address
  6554.     ECX = new byte-granular limit
  6555. Return: CF clear if successful
  6556.     CF set on error
  6557. SeeAlso: AX=FF08h,AX=FF09h
  6558. --------E-31FF0B-----------------------------
  6559. INT 31 P - CauseWay - "GetMem" - ALLOCATE BLOCK OF MEMORY
  6560.     AX = FF0Bh
  6561.     CX:DX = size in bytes (FFFFh:FFFFh to get size of largest available)
  6562. Return: CF clear if successful
  6563.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  6564.         CX:DX = size of largest available block if requested FFFFh:FFFFh
  6565.     CF set on error
  6566. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF0Fh,AX=FF10h,AX=FF2Ch
  6567. --------E-31FF0C-----------------------------
  6568. INT 31 P - CauseWay - "GetMem32" - ALLOCATE BLOCK OF MEMORY (32-bit)
  6569.     AX = FF0Ch
  6570.     ECX = size in bytes (FFFFFFFFh to get size of largest available block)
  6571. Return: CF clear if successful
  6572.         BX = selector for accessing block if requested size not FFFFh:FFFFh
  6573.         ECX = size of largest available block if requested FFFFh:FFFFh
  6574.     CF set on error
  6575. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF0Fh,AX=FF11h
  6576. --------E-31FF0D-----------------------------
  6577. INT 31 P - CauseWay - "ResMem" - RESIZE MEMORY BLOCK
  6578.     AX = FF0Dh
  6579.     BX = selector for block to be resized
  6580.     CX:DX = new size in bytes
  6581. Return: CF clear if successful
  6582.     CF set on error
  6583. Note:    the memory block may have to be copied to another location in order
  6584.       to satisfy the requested new size, in which case the base address
  6585.       of the selector is updated
  6586. SeeAlso: AX=FF0Bh,AX=FF0Eh,AX=FF12h
  6587. --------E-31FF0E-----------------------------
  6588. INT 31 P - CauseWay - "ResMem32" - RESIZE MEMORY BLOCK (32-bit)
  6589.     AX = FF0Eh
  6590.     BX = selector for block to be resized
  6591.     ECX = new size in bytes
  6592. Return: CF clear if successful
  6593.     CF set on error
  6594. Note:    the memory block may have to be copied to another location in order
  6595.       to satisfy the requested new size, in which case the base address
  6596.       of the selector is updated
  6597. SeeAlso: AX=FF0Ch,AX=FF0Dh,AX=FF13h
  6598. --------E-31FF0F-----------------------------
  6599. INT 31 P - CauseWay - "RelMem" - RELEASE PREVIOUSLY ALLOCATED MEMORY
  6600.     AX = FF0Fh
  6601.     BX = selector for block to be released
  6602. Return: CF clear if successful
  6603.     CF set on error
  6604. SeeAlso: AX=FF0Bh,AX=FF0Ch,AX=FF14h
  6605. --------E-31FF10-----------------------------
  6606. INT 31 P - CauseWay - "GetMemLinear" - ALLOCATE MEMORY WITHOUT SELECTOR
  6607.     AX = FF10h
  6608.     CX:DX = size of block in bytes
  6609. Return: CF clear if successful
  6610.         SI:DI = linear address of allocated block
  6611.     CF set on error
  6612. Note:    this function may return addresses above 16M
  6613. SeeAlso: AX=FF0Bh,AX=FF11h,AX=FF12h,AX=FF14h
  6614. --------E-31FF11-----------------------------
  6615. INT 31 P - CauseWay - "GetMemLinear32" - ALLOCATE MEMORY WITHOUT SELECTOR
  6616.     AX = FF11h
  6617.     ECX = size of block in bytes
  6618. Return: CF clear if successful
  6619.         ESI = linear address of allocated block
  6620.     CF set on error
  6621. Note:    this function may return addresses above 16M
  6622. SeeAlso: AX=FF0Ch,AX=FF10h,AX=FF13h,AX=FF14h
  6623. --------E-31FF12-----------------------------
  6624. INT 31 P - CauseWay - "ResMemLinear" - RESIZE LINEAR MEMORY BLOCK
  6625.     AX = FF12h
  6626.     CX:DX = new size in bytes
  6627.     SI:DI = linear address of block to be resized
  6628. Return: CF clear if successful
  6629.        SI:DI = new linear address of block
  6630.     CF set on error
  6631. SeeAlso: AX=FF0Dh,AX=FF10h,AX=FF13h
  6632. --------E-31FF13-----------------------------
  6633. INT 31 P - CauseWay - "ResMemLinear32" - RESIZE LINEAR MEMORY BLOCK (32-bit)
  6634.     AX = FF13h
  6635.     ECX = new size in bytes
  6636.     ESI = linear address of block to be resized
  6637. Return: CF clear if successful
  6638.        ESI = new linear address of block
  6639.     CF set on error
  6640. SeeAlso: AX=FF0Eh,AX=FF11h,AX=FF12h
  6641. --------E-31FF14-----------------------------
  6642. INT 31 P - CauseWay - "RelMemLinear" - RELEASE LINEAR MEMORY BLOCK
  6643.     AX = FF14h
  6644.     SI:DI = linear address of block to be released
  6645. Return: CF clear if successful
  6646.     CF set on error
  6647. SeeAlso: AX=FF0Fh,AX=FF10h,AX=FF15h
  6648. --------E-31FF15-----------------------------
  6649. INT 31 P - CauseWay - "RelMemLinear32" - RELEASE LINEAR MEMORY BLOCK (32-bit)
  6650.     AX = FF15h
  6651.     ESI = linear address of block to be released
  6652. Return: CF clear if successful
  6653.     CF set on error
  6654. SeeAlso: AX=FF0Fh,AX=FF11h,AX=FF15h
  6655. --------E-31FF16-----------------------------
  6656. INT 31 P - CauseWay - "GetMemNear" - ALLOCATE APPLICATION-RELATIVE MEMORY
  6657.     AX = FF16h
  6658.     EBX = size in bytes of block to allocate
  6659. Return: CF clear if successful
  6660.        ESI = application-relative linear address of allocated block
  6661.     CF set on error
  6662. SeeAlso: AX=FF17h,AX=FF18h,AX=FF19h
  6663. --------E-31FF17-----------------------------
  6664. INT 31 P - CauseWay - "ResMemNear" - RESIZE APPLICATION-RELATIVE MEMORY BLOCK
  6665.     AX = FF17h
  6666.     EBX = size in bytes of block to allocate
  6667.     ESI = application-relative linear address of block
  6668. Return: CF clear if successful
  6669.         ESI = new application-relative linear address of block
  6670.     CF set on error
  6671. SeeAlso: AX=FF16h,AX=FF18h,AX=FF19h
  6672. --------E-31FF18-----------------------------
  6673. INT 31 P - CauseWay - "RelMemNear" - RELEASE APPLICATION-RELATIVE MEMORY BLOCK
  6674.     AX = FF18h
  6675.     ESI = application-relative linear address of block
  6676. Return: CF clear if successful
  6677.     CF set on error
  6678. SeeAlso: AX=FF16h,AX=FF17h,AX=FF19h
  6679. --------E-31FF19-----------------------------
  6680. INT 31 P - CauseWay - "Linear2Near" - CONVERT LINEAR TO APP-RELATIVE ADDRESS
  6681.     AX = FF19h
  6682.     ESI = linear address
  6683. Return: ESI = application-relative linear address
  6684. SeeAlso: AX=FF1Ah
  6685. --------E-31FF1A-----------------------------
  6686. INT 31 P - CauseWay - "Near2Linear" - CONVERT APP-RELATIVE TO LINEAR ADDRESS
  6687.     AX = FF1Ah
  6688.     ESI = application-relative linear address
  6689. Return: ESI = linear address
  6690. SeeAlso: AX=FF19h
  6691. --------E-31FF1B-----------------------------
  6692. INT 31 P - CauseWay - "LockMem" - LOCK REGION OF MEMORY
  6693.     AX = FF1Bh
  6694.     BX:CX = starting linear address
  6695.     SI:DI = size of region in bytes
  6696. Return: CF clear if successful
  6697.     CF set on error
  6698. Desc:    prevent memory from being swapped out by the virtual memory manager
  6699. Note:    locks are applied on 4K page boundaries, so memory above and below
  6700.       the specified region may be locked as well
  6701. SeeAlso: AX=FF1Ch,AX=FF1Dh
  6702. --------E-31FF1C-----------------------------
  6703. INT 31 P - CauseWay - "LockMem32" - LOCK REGION OF MEMORY (32-bit)
  6704.     AX = FF1Ch
  6705.     ESI = starting linear address
  6706.     ECX = size of region in bytes
  6707. Return: CF clear if successful
  6708.     CF set on error
  6709. Desc:    prevent memory from being swapped out by the virtual memory manager
  6710. Note:    locks are applied on 4K page boundaries, so memory above and below
  6711.       the specified region may be locked as well
  6712. SeeAlso: AX=FF1Bh,AX=FF1Eh,AX=FF1Fh
  6713. --------E-31FF1D-----------------------------
  6714. INT 31 P - CauseWay - "UnLockMem" - UNLOCK REGION OF MEMORY
  6715.     AX = FF1Dh
  6716.     BX:CX = starting linear address
  6717.     SI:DI = size of region in bytes
  6718. Return: CF clear if successful
  6719.     CF set on error
  6720. Desc:    allow memory to be swapped out by the virtual memory manager
  6721. Note:    locks are applied on 4K page boundaries, so memory above and below
  6722.       the specified region may be unlocked as well
  6723. SeeAlso: AX=FF1Bh,AX=FF1Eh
  6724. --------E-31FF1E-----------------------------
  6725. INT 31 P - CauseWay - "UnLockMem32" - UNLOCK REGION OF MEMORY (32-bit)
  6726.     AX = FF1Eh
  6727.     ESI = starting linear address
  6728.     ECX = size of region in bytes
  6729. Return: CF clear if successful
  6730.     CF set on error
  6731. Desc:    allow memory to be swapped out by the virtual memory manager
  6732. Note:    locks are applied on 4K page boundaries, so memory above and below
  6733.       the specified region may be unlocked as well
  6734. SeeAlso: AX=FF1Ch,AX=FF1Dh,AX=FF20h
  6735. --------E-31FF1F-----------------------------
  6736. INT 31 P - CauseWay - "LockMemNear" - LOCK APPLICATION-RELATIVE MEMORY REGION
  6737.     AX = FF1Fh
  6738.     ESI = starting application-relative linear address
  6739.     EBX = size of region in bytes
  6740. Return: CF clear if successful
  6741.     CF set on error
  6742. Desc:    prevent memory from being swapped out by the virtual memory manager
  6743. Note:    locks are applied on 4K page boundaries, so memory above and below
  6744.       the specified region may be locked as well
  6745. SeeAlso: AX=FF1Ch,AX=FF20h
  6746. --------E-31FF20-----------------------------
  6747. INT 31 P - CauseWay - "UnLockMemNear" - UNLOCK APP-RELATIVE MEMORY REGION
  6748.     AX = FF20h
  6749.     ESI = starting application-relative linear address
  6750.     ECX = size of region in bytes
  6751. Return: CF clear if successful
  6752.     CF set on error
  6753. Desc:    allow memory to be swapped out by the virtual memory manager
  6754. Note:    locks are applied on 4K page boundaries, so memory above and below
  6755.       the specified region may be unlocked as well
  6756. SeeAlso: AX=FF1Eh,AX=FF1Fh
  6757. --------E-31FF21-----------------------------
  6758. INT 31 P - CauseWay - "GetMemDOS" - ALLOCATE CONVENTIONAL MEMORY
  6759.     AX = FF21h
  6760.     BX = number of paragraphs to allocate
  6761. Return: CF clear if successful
  6762.         AX = real-mode segment of allocated block
  6763.         DX = initial selector for block
  6764.     CF set on error
  6765.         AX = DOS error code (see #0980 at INT 21/AH=59h)
  6766.         BX = size of largest available block
  6767. Note:    if the requested size is greater than 64K, contiguous selectors will
  6768.       be allocated, one for each 64K; for 32-bit applications, the first
  6769.       selector's limit will be set to the size of the entire block, while
  6770.       that selector will have a limit of 64K for 16-bit applications.  All
  6771.       selectors after the first one have a limit of 64K except the final
  6772.       one
  6773. SeeAlso: AX=FF22h,AX=FF23h,INT 21/AH=48h
  6774. --------E-31FF22-----------------------------
  6775. INT 31 P - CauseWay - "ResMemDOS" - RESIZE CONVENTIONAL MEMORY BLOCK
  6776.     AX = FF22h
  6777.     BX = new size in paragraphs
  6778.     DX = initial selector for block
  6779. Return: CF clear if successful
  6780.     CF set on error
  6781.         AX = DOS error code (see #0980 at INT 21/AH=59h)
  6782.         BX = maximum number of paragraphs available
  6783. Note:    this function will also fail if the block is expanded past a 64K
  6784.       boundary and the next selector is already in use
  6785. SeeAlso: AX=FF21h,AX=FF23h,INT 21/AH=49h
  6786. --------E-31FF23-----------------------------
  6787. INT 31 P - CauseWay - "RelMemDOS" - RELEASE CONVENTIONAL MEMORY BLOCK
  6788.     AX = FF23h
  6789.     DX = initial selector for block
  6790. Return: CF clear if successful
  6791.     CF set on error
  6792.         AX = DOS error code (see #0980 at INT 21/AH=59h)
  6793. Note:    all descriptors allocated for the block are freed
  6794. SeeAlso: AX=FF21h,AX=FF22h,INT 21/AH=4Ah
  6795. --------E-31FF24-----------------------------
  6796. INT 31 P - CauseWay - "ExecOverlay" - LOAD AND OPTIONALLY EXECUTE APP CODE
  6797.     AX = FF24h
  6798.     EBX = flags
  6799.         bit 0: don't execute (overlay only)
  6800.         bit 1: don't preserve relocation information
  6801.     ES:EDX -> filename (see also #2354)
  6802.     FS:ESI -> commandline (ESI = 00000000h if no commandline)
  6803.     GS:EDI -> name (CW's /o option)
  6804. Return: CF clear if successful
  6805.         ---EBX bit 0 set---
  6806.         CX:EDX = program entry point (CS:EIP)
  6807.         SI = segment of PSP
  6808.         ---EBX bit 1 set---
  6809.         BX:EAX = initial SS:ESP
  6810.         EDI high word = base segment
  6811.         EDI low word = number of segments
  6812.         EBP = start of segment definitions
  6813.     CF set on error
  6814.         AX = error code
  6815.         0001h DOS file access error
  6816.         0002h not a CuaseWay 3P file
  6817.         0003h not enough memory
  6818. SeeAlso: AX=FF2Ah,INT 21/AH=4Bh
  6819.  
  6820. Format of CauseWay executable:
  6821. Offset    Size    Description    (Table 2354)
  6822.  00h  2 BYTEs    signature "3P"
  6823.  02h    DWORD    size of header data in bytes
  6824.  06h    DWORD    size of EXE image data in bytes
  6825.  0Ah    DWORD    number of bytes of program memory required
  6826.  0Eh    WORD    number of segment definitions (see #2356)
  6827.  10h    DWORD    number of relocation table entries
  6828.  14h    DWORD    offset of program entry point
  6829.  18h    WORD    segment list entry number for entry point's CS
  6830.  1Ah    DWORD    initial ESP
  6831.  1Eh    WORD    segment list entry number for initial SS
  6832.  20h    DWORD    control flags (see #2355)
  6833.  24h    DWORD    automatic stack size in bytes if ESP entry = 00000000h
  6834.  28h    BYTE    length of name (name follows program image)
  6835.  29h 23 BYTEs    reserved
  6836. SeeAlso: #0901,#0916 at INT 21/AH=4Bh
  6837.  
  6838. Bitfields for CauseWay executable control flags:
  6839. Bit(s)    Description    (Table 2355)
  6840.  0    16-bit interrupt stack frame
  6841.  7    descriptor table type (0 = GDT, 1 = LDT)
  6842.  14    16-bit default data size
  6843.  31    compressed EXE image
  6844. Note:    bits 0 and 14 should always be equal
  6845. SeeAlso: #2354
  6846.  
  6847. Format of CauseWay segment definition [array]:
  6848. Offset    Size    Description    (Table 2356)
  6849.  00h    DWORD    start offset within program image
  6850.  04h    DWORD    length and type
  6851.         bits 0-19: length
  6852.         bit 20:       granularity (if set, length is in 4K pages)
  6853.         bits 21-24: type
  6854.             0000 code
  6855.             0001 read/write data
  6856.             0010 stack
  6857.             0011 read-only data
  6858.         bit 25: force segment descriptor's D bit to 0
  6859.         bit 26: force segmetn descriptor's D bit to 1
  6860. SeeAlso: #2354
  6861. --------E-31FF25-----------------------------
  6862. INT 31 P - CauseWay - "GetDOSTrans" - GET DOS TRANSFER BUFFER
  6863.     AX = FF25h
  6864. Return: BX = real-mode segment of transfer buffer
  6865.     ECX = transfer buffer size
  6866.     DX = protected-mode selector for transfer buffer
  6867. Note:    the default buffer size of 8K is sufficient for most applications,
  6868.       but an application performing large amounts of file I/O may benefit
  6869.       from allocating its own, larger buffer
  6870. SeeAlso: AX=FF00h,AX=FF26h
  6871. --------E-31FF26-----------------------------
  6872. INT 31 P - CauseWay - "SetDOSTrans" - SET DOS TRANSFER BUFFER
  6873.     AX = FF26h
  6874.     BX = real-mode segment of new transfer buffer
  6875.     ECX = new transfer buffer size
  6876.     DX = protected-mode selector for new transfer buffer
  6877. Return: nothing
  6878. Note:    the specific buffer must be located in conventional memory; only the
  6879.       first 64K will be used
  6880. SeeAlso: AX=FF25h
  6881. --------E-31FF27-----------------------------
  6882. INT 31 P - CauseWay v1.3 - "GetMCBSize" - GET CURRENT MCB ALLOCATION BLOCK SIZE
  6883.     AX = FF27h
  6884. Return: ECX = current threshold
  6885. Desc:    determine the memory allocation size below which CauseWay will use
  6886.       internal MCB chains rather than allocating full 4K pages via DPMI
  6887. SeeAlso: AX=FF00h,AX=FF28h
  6888. --------E-31FF28-----------------------------
  6889. INT 31 P - CauseWay v1.3 - "SetMCBSize" - SET MCB MEMORY ALLOCATION BLOCK SIZE
  6890.     AX = FF28h
  6891.     ECX = new threshold (0000000h to disable MCB memory allocation system)
  6892. Return: CF clear if successful
  6893.         threshold unchanged (default 16K)
  6894.     CF set on error (threshold > 64K)
  6895. Desc:    specify the memory allocation size below which CauseWay will use
  6896.       internal MCB chains rather than allocating full 4K pages via DPMI
  6897. Note:    the specified threshold will be rounded up to the next higher multiple
  6898.       of 4K
  6899. SeeAlso: AX=FF00h,AX=FF27h
  6900. --------E-31FF29-----------------------------
  6901. INT 31 P - CauseWay v1.3 - "GetSels" - ALLOCATE MULTIPLE SELECTORS
  6902.     AX = FF29h
  6903.     CX = number of selectors to allocate
  6904. Return: BX = base selector
  6905. Desc:    allocate multiple contiguous selectors, initializing each to have a
  6906.       base address and limit of zero
  6907. SeeAlso: AX=FF00h,AX=FF04h
  6908. --------E-31FF2A-----------------------------
  6909. INT 31 P - CauseWay v1.3 - "cwLoad" - LOAD ANOTHER CAUSEWAY PROGRAM AS OVERLAY
  6910.     AX = FF2Ah
  6911.     DS:EDX -> filename
  6912. Return: CF clear if successful
  6913.         CX:EDX = CS:EIP of entry point
  6914.         BX:EAX = initial SS:ESP for program
  6915.         SI = PSP for overlay program
  6916.     CF set on error
  6917.         AX = error code (01h file error, 02h not a 3P file, 03h no memory)
  6918. Note:    the returned PSP can be given to "RelMem" (AX=FF0Fh) to release the
  6919.       overlay's memory and selectors; only selectors and memory allocated
  6920.       during loading will be freed by RelMem unless one switches PSPs with
  6921.       INT 21/AH=50h
  6922. SeeAlso: AX=FF00h,AX=FF24h
  6923. --------E-31FF2B-----------------------------
  6924. INT 31 P - CauseWay v1.3 - "cwcInfo" - VALIDATE AND GET SIZE OF CWC FILE
  6925.     AX = FF2Bh
  6926.     BX = file handle for CWC-compressed file
  6927. Return: CF clear if successful
  6928.         ECX = expanded file size
  6929.     CF set on error (not a CWC-compressed file)
  6930. SeeAlso: AX=FF00h,AX=FFFBh
  6931. --------E-31FF2C-----------------------------
  6932. INT 31 P - CauseWay v1.3 - "GetMemSO" - ALLOCATE MEMORY AND RETURN SEL:OFFSET
  6933.     AX = FF2Ch
  6934.     CX:DX = block size in bytes
  6935. Return: CF clear if successful
  6936.        SI:DI = selector:offset of allocated memory
  6937.     CF set on error
  6938. Note:    unlike "GetMem" (AX=FF0Bh), this function will reuse selectors until a
  6939.       segment is full, rather than allocating a new selector for each
  6940.       memory block
  6941. SeeAlso: AX=FF00h,AX=FF2Dh,AX=FF2Eh
  6942. --------E-31FF2D-----------------------------
  6943. INT 31 P - CauseWay v1.3 - "ResMemSO" - RESIZE SELECTOR:OFFSET MEMORY BLOCK
  6944.     AX = FF2Dh
  6945.     SI:DI = selector:offset for memory block
  6946.     CX:DX = new size of block
  6947. Return: CF clear if successful
  6948.        SI:DI = new selector:offset for memory block
  6949.     CF set on error
  6950. SeeAlso: AX=FF00h,AX=FF2Ch,AX=FF2Eh
  6951. --------E-31FF2E-----------------------------
  6952. INT 31 P - CauseWay v1.3 - "RelMemSO" - RELEASE SELECTOR:OFFSET MEMORY BLOCK
  6953.     AX = FF2Eh
  6954.     SI:DI = selector:offset for memory block
  6955. SeeAlso: AX=FF00h
  6956. --------E-31FFFB-----------------------------
  6957. INT 31 P - Causeway v1.3 - "cwcLoad" - LOAD/EXPAND CWC-COMPRESSED FILE
  6958.     AX = FFFBh
  6959.     BX = source file handle
  6960.     ES:EDI -> memory buffer into which to expand file
  6961. Return: CF clear if successful
  6962.         ECX = expanded data length
  6963.     CF set on error
  6964.         EAX = error code (01h file error, 02h bad data, 03h not CWC file)
  6965. Note:    the provided file may consist of the concatenation of several CWC
  6966.       files; the one beginning at the current file position will be
  6967.       expanded
  6968. SeeAlso: AX=FF2Bh
  6969. --------v-32---------------------------------
  6970. INT 32 - VIRUS - reportedly used by "Tiny" Viruses
  6971. SeeAlso: INT 21/AX=FFFFh"VIRUS",INT 31"VIRUS",INT 44"VIRUS"
  6972. --------v-32---------------------------------
  6973. INT 32 - VIRUS - "Plovdiv 1.3"/"Damage 1.3" - ORIGINAL INT 21h VECTOR
  6974. SeeAlso: INT 31"VIRUS",INT 9E"VIRUS"
  6975. --------y-326E-------------------------------
  6976. INT 32 - NOISE.SYS 0.53 - API
  6977.     AH = 6Eh (function ID)
  6978.     AL = subfunction (see INT 32/AX=6E00h)
  6979. Return: CF set on error
  6980.         AL = error code (see #2357)
  6981.     CF clear if successful
  6982. Notes:    INT 32 is only a proposed interface for NOISE.SYS. Use the IOCTL READ
  6983.       from the RANDOM device to determine the interrupt and function ID
  6984.       used by the driver, since future versions may use the Alternate
  6985.       Multiplex Interrupt (AMIS) at INT 2Dh.
  6986.     the beta v0.51 had a substantially different API on INT 32/AH=6Eh
  6987.  
  6988. (Table 2357)
  6989. Values for NOISE.SYS error codes:
  6990.  00h    subfunction not supported
  6991.  FBh    random pool is empty
  6992.  FCh    quality of sample is too low
  6993.  FDh    too many processes using the API or driver
  6994.  FEh    subfunction is disabled in the current build
  6995.  FFh    successful
  6996. --------y-326E00-----------------------------
  6997. INT 32 - NOISE.SYS v0.53+ - INSTALLATION CHECK
  6998.     AX = 6E00h
  6999. Return:    AL = installation status
  7000.         00h not installed
  7001.         FFh installed
  7002.         CX = version (ie, 0123h = Version 1.2.3)
  7003.         DX:DI -> signature string
  7004. --------y-326E01-----------------------------
  7005. INT 32 - NOISE.SYS v0.53+ - GET ENTRY POINT
  7006.     AX = 6E01h
  7007. Return:    AL = FFh
  7008.     DX:DI -> far call hook
  7009. ----------326E04-----------------------------
  7010. INT 32 - NOISE.SYS v0.55+ - GET INTERRUPT HOOK LIST
  7011.     AX = 6E04h
  7012. Return: AL = status
  7013.         00h = unimplemented
  7014.         04h = DX:BX -> interrupt hook list
  7015.         FEh = subfunction disabled
  7016. Note:    the hook list array ends with API interrupt (usually 32h, although
  7017.       it will differ if the API is installed at another interrupt)
  7018. ----------326E06-----------------------------
  7019. INT 32 - NOISE.SYS v0.55+ - GET DEVICE DRIVER HEADER
  7020.     AX = 6E06h
  7021. Return: AL = number of device drivers in NOISE.SYS chain
  7022.         02h = default (for RANDOM and URANDOM devices)
  7023.     AH = AMIS device driver flags (set to 00h for now)
  7024.     DX:BX -> first device in chain (see #0953)
  7025. SeeAlso: INT 2D/AL=06h
  7026. --------y-326E10-----------------------------
  7027. INT 32 - NOISE.SYS v0.53+ - STATUS CHECK
  7028.     AX = 6E10h
  7029. Return: CF set on error
  7030.         AL = error code (FDh) (see #2357)
  7031.     CF clear if successful
  7032.         AL = status
  7033.         FFh successful
  7034.         BH = number of processes using the API
  7035.         CX = number of random bytes waiting
  7036.         DX = maximum possible bytes waiting
  7037.         (if CX=DX, the pool is full)
  7038. Note:    this subfunction is a convenient way to check the driver if any
  7039.       fresh bytes are waiting in the output pool.
  7040. SeeAlso: INT 32/AH=6Eh,AX=6E00h,AX=6E11h
  7041. --------y-326E11-----------------------------
  7042. INT 32 - NOISE.SYS v0.53+ - GET ENTROPY ESTIMATE
  7043.     AX = 6E11h
  7044. Return: CF set on error
  7045.         AL = error code (00h,FDh,FEh) (see #2357)
  7046.     CF clear if successful
  7047.         EBX = estimated bit count (see note)
  7048.         CL = FRACBITS (number of fractional bits)
  7049.         EDX = low 32-bits of total number of samples added
  7050. Note:  the estimated number of fresh random bits is equal to
  7051.       (EAX >> FRACBITS) + ((EAX & ((1 << FRACBITS)-1) / (1 << FRACBITS))
  7052. SeeAlso: AH=6Eh,AX=6E00h
  7053. --------y-326E12-----------------------------
  7054. INT 32 - NOISE.SYS v0.53+ - ADD SAMPLE FROM FAST TIMER
  7055.     AX = 6E12h
  7056. Return: CF set on error
  7057.         AL = error code (FCh,FDh,FEh) (see #2357)
  7058.     CF clear if successful
  7059.         CX = number of random bytes waiting
  7060. Note:    subfunctions 12h and 13h are meant for applications or devices
  7061.       which are able to gather entropy from other sources which are
  7062.       not polled by NOISE.SYS (for example, a communications driver
  7063.       could use this call to sample packet arrival times).
  7064. SeeAlso: AX=6E00h,AX=6E10h,AX=6E13h
  7065. --------y-326E13-----------------------------
  7066. INT 32 - NOISE.SYS v0.53+ - ADD 16-BIT SAMPLE TO RANDOM POOL
  7067.     AX = 6E13h
  7068.     DX = sample
  7069. Return: CF set on error
  7070.         AL = error code (FCh,FEh) (see #2357)
  7071.     CF clear if successful
  7072.         CX = number of random bytes waiting
  7073. SeeAlso: AX=6E00h,AX=6E11h
  7074. --------y-326E14-----------------------------
  7075. INT 32 - NOISE.SYS v0.53+ - GET FLAGS
  7076.     AX = 6E14h
  7077. Return: BX = flags (see #3219)
  7078.     CX = mask of settable flags in BX
  7079. SeeAlso: AX=6E00h,AX=6E15h
  7080.  
  7081. Bitfields for NOISE.SYS flags:
  7082. Bit(s)    Description    (Table 3219)
  7083.  0    MS Windows active
  7084.  1-5    reserved
  7085.  6    clock drift sampling
  7086.  7    video retrace drift sampling
  7087.  8    network access sampling (not implemented yet in 0.53)
  7088.  9    CD-ROM access sampling (not implemented yet in 0.53)
  7089.  10    DOS spinner
  7090.  11    DOS process start/end and miscellaneous process activity sampling
  7091.  12    mouse movement/button sampling
  7092.  13    disk sampling (INT 13)
  7093.  14    keystroke timings
  7094.  15    reserved for hardware RNG
  7095. --------y-326E15-----------------------------
  7096. INT 32 - NOISE.SYS v0.53+ - SET FLAGS
  7097.     AX = 6E15h
  7098.     BX = flags (see #3219)
  7099. Return: BX = new flags
  7100. Note:    flags which AX=6E14h indicates are not settable should be masked off
  7101.       by ANDing with the CX returned by AX=6E14h
  7102. SeeAlso: AX=6E00h,AX=6E14h
  7103. --------y-326E16-----------------------------
  7104. INT 32 - NOISE.SYS v0.53+ - READ URANDOM BYTES
  7105.     AX = 6E16h
  7106.     CX = number of bytes
  7107.     ES:DI -> buffer
  7108. Return: CF set on error
  7109.         AL = error code (FDh,FEh) (see #2357)
  7110.     CF clear if successful
  7111.         CX = number of random bytes read
  7112. SeeAlso: AX=6E00h,AX=6E12h,AX=6E17h
  7113. --------y-326E17-----------------------------
  7114. INT 32 - NOISE.SYS v0.53+ - READ RANDOM BYTES
  7115.     AX = 6E17h
  7116.     CX = number of bytes
  7117.     ES:DI -> buffer
  7118. Return: CF set on error
  7119.         AL = error code (FBh,FDh,FEh) (see #2357)
  7120.     CF clear if successful
  7121.         CX = number of random bytes read
  7122. SeeAlso: AX=6E00h,AX=6E16h
  7123. ----------326E18-----------------------------
  7124. INT 32 - NOISE.SYS v0.6+ - READ CONTROL RECORD
  7125.     AX = 6E18h
  7126.     CX = buffer size
  7127.     ES:DI -> buffer
  7128. Return: AL = status
  7129.         00h unimplemented (before v0.6)
  7130.         FEh subfunction is disabled
  7131.         FFh successful
  7132.         CX = number of bytes read
  7133. Note:    the control record corresponds to the IOCTL Read record for the RANDOM
  7134.       device
  7135. ----------326E19-----------------------------
  7136. INT 32 - NOISE.SYS - RESERVED FOR FUTURE USE
  7137.     AH = 6Eh
  7138.     AL = 19h to 3Fh
  7139. Return: AL = 00h
  7140. Note:    these functions are reserved for future use; user additions to the
  7141.       the driver should use subfunctions 40h to FFh.
  7142. --------M-330000-----------------------------
  7143. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  7144.     AX = 0000h
  7145. Return: AX = status
  7146.         0000h hardware/driver not installed
  7147.         FFFFh hardware/driver installed
  7148.     BX = number of buttons
  7149.         0000h other than two
  7150.         0002h two buttons (many drivers)
  7151.         0003h Mouse Systems/Logitech three-button mouse
  7152.         FFFFh two buttons
  7153. Notes:    to use mouse on a Hercules-compatible monographics card in graphics
  7154.       mode, you must first set 0040h:0049h to 6 for page 0 or 5 for page 1,
  7155.       and then call this function.    Logitech drivers v5.01 and v6.00
  7156.       reportedly do not correctly use Hercules graphics in dual-monitor
  7157.       systems, while version 4.10 does.
  7158.     the Logitech mouse driver contains the signature string "LOGITECH"
  7159.       three bytes past the interrupt handler; many of the Logitech mouse
  7160.       utilities check for this signature.
  7161.     Logitech MouseWare v6.30 reportedly does not support CGA video modes
  7162.       if no CGA is present when it is started and the video board is
  7163.       later switched into CGA emulation
  7164. SeeAlso: AX=0011h,AX=0021h,AX=002Fh,INT 62/AX=007Ah,INT 74
  7165. --------M-330001-----------------------------
  7166. INT 33 - MS MOUSE v1.0+ - SHOW MOUSE CURSOR
  7167.     AX = 0001h
  7168. SeeAlso: AX=0002h,INT 16/AX=FFFEh,INT 62/AX=007Bh,INT 6F/AH=06h"F_TRACK_ON"
  7169. --------M-330002-----------------------------
  7170. INT 33 - MS MOUSE v1.0+ - HIDE MOUSE CURSOR
  7171.     AX = 0002h
  7172. Note:    multiple calls to hide the cursor will require multiple calls to
  7173.       function 01h to unhide it.
  7174. SeeAlso: AX=0001h,AX=0010h,INT 16/AX=FFFFh,INT 62/AX=007Bh
  7175. SeeAlso: INT 6F/AH=08h"F_TRACK_OFF"
  7176. --------M-330003-----------------------------
  7177. INT 33 - MS MOUSE v1.0+ - RETURN POSITION AND BUTTON STATUS
  7178.     AX = 0003h
  7179. Return: BX = button status (see #2358)
  7180.     CX = column
  7181.     DX = row
  7182. Note:    in text modes, all coordinates are specified as multiples of the cell
  7183.       size, typically 8x8 pixels
  7184. SeeAlso: AX=0004h,AX=000Bh,INT 2F/AX=D000h"ZWmous"
  7185.  
  7186. Bitfields for mouse button status:
  7187. Bit(s)    Description    (Table 2358)
  7188.  0    left button pressed if 1
  7189.  1    right button pressed if 1
  7190.  2    middle button pressed if 1 (Mouse Systems/Logitech/Genius)
  7191. --------M-330004-----------------------------
  7192. INT 33 - MS MOUSE v1.0+ - POSITION MOUSE CURSOR
  7193.     AX = 0004h
  7194.     CX = column
  7195.     DX = row
  7196. Note:    the row and column are truncated to the next lower multiple of the cell
  7197.       size (typically 8x8 in text modes); however, some versions of the
  7198.       Microsoft documentation incorrectly state that the coordinates are
  7199.       rounded
  7200. SeeAlso: AX=0003h,INT 62/AX=0081h,INT 6F/AH=10h"F_PUT_SPRITE"
  7201. --------M-330005-----------------------------
  7202. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON PRESS DATA
  7203.     AX = 0005h
  7204.     BX = button number (see #2359)
  7205. Return: AX = button states (see #2358)
  7206.     BX = number of times specified button has been pressed since last call
  7207.     CX = column at time specified button was last pressed
  7208.     DX = row at time specified button was last pressed
  7209. Note:    at least for the Genius mouse driver, the number of button presses
  7210.       returned is limited to 7FFFh
  7211. SeeAlso: AX=0006h,INT 62/AX=007Ch
  7212.  
  7213. (Table 2359)
  7214. Values for mouse button number:
  7215.  0000h    left
  7216.  0001h    right
  7217.  0002h    middle (Mouse Systems/Logitech/Genius mouse)
  7218. --------M-330006-----------------------------
  7219. INT 33 - MS MOUSE v1.0+ - RETURN BUTTON RELEASE DATA
  7220.     AX = 0006h
  7221.     BX = button number (see #2359)
  7222. Return: AX = button states (see #2358)
  7223.     BX = number of times specified button has been released since last call
  7224.     CX = column at time specified button was last released
  7225.     DX = row at time specified button was last released
  7226. Note:    at least for the Genius mouse driver, the number of button releases
  7227.       returned is limited to 7FFFh
  7228. SeeAlso: AX=0005h,INT 62/AX=007Ch
  7229. --------M-330007-----------------------------
  7230. INT 33 - MS MOUSE v1.0+ - DEFINE HORIZONTAL CURSOR RANGE
  7231.     AX = 0007h
  7232.     CX = minimum column
  7233.     DX = maximum column
  7234. Note:    in text modes, the minimum and maximum columns are truncated to the
  7235.       next lower multiple of the cell size, typically 8x8 pixels
  7236. SeeAlso: AX=0008h,AX=0010h,AX=0031h,INT 62/AX=0080h
  7237. SeeAlso: INT 6F/AH=0Ch"F_SET_LIMITS_X"
  7238. --------M-330008-----------------------------
  7239. INT 33 - MS MOUSE v1.0+ - DEFINE VERTICAL CURSOR RANGE
  7240.     AX = 0008h
  7241.     CX = minimum row
  7242.     DX = maximum row
  7243. Note:    in text modes, the minimum and maximum rows are truncated to the
  7244.       next lower multiple of the cell size, typically 8x8 pixels
  7245. SeeAlso: AX=0007h,AX=0010h,AX=0031h,INT 62/AX=0080h
  7246. SeeAlso: INT 6F/AH=0Eh"F_SET_LIMITS_Y"
  7247. --------M-330009-----------------------------
  7248. INT 33 - MS MOUSE v3.0+ - DEFINE GRAPHICS CURSOR
  7249.     AX = 0009h
  7250.     BX = column of cursor hot spot in bitmap (-16 to 16)
  7251.     CX = row of cursor hot spot (-16 to 16)
  7252.     ES:DX -> mask bitmap (see #2360)
  7253. Notes:    in graphics modes, the screen contents around the current mouse cursor
  7254.       position are ANDed with the screen mask and then XORed with the
  7255.       cursor mask
  7256.     the Microsoft mouse driver v7.04 and v8.20 uses only BL and CL, so the
  7257.       hot spot row/column should be limited to -128..127
  7258.     Microsoft KnowledgeBase article Q19850 states that the high bit is
  7259.       right-most, but that statement is contradicted by all other available
  7260.       documentation
  7261. SeeAlso: AX=000Ah,AX=0012h,AX=002Ah,INT 62/AX=007Fh,INT 6F/AH=0Ah"F_DEF_MASKS"
  7262.  
  7263. Format of mouse mask bitmap:
  7264. Offset    Size    Description    (Table 2360)
  7265.  00h 16 WORDs    screen mask
  7266.  10h 16 WORDs    cursor mask
  7267. Note:    each word defines the sixteen pixels of a row, low bit rightmost
  7268. --------M-33000A-----------------------------
  7269. INT 33 - MS MOUSE v3.0+ - DEFINE TEXT CURSOR
  7270.     AX = 000Ah
  7271.     BX = hardware/software text cursor
  7272.         0000h software
  7273.         CX = screen mask
  7274.         DX = cursor mask
  7275.         0001h hardware
  7276.         CX = start scan line
  7277.         DX = end scan line
  7278. Note:    when the software cursor is selected, the character/attribute data at
  7279.       the current screen position is ANDed with the screen mask and then
  7280.       XORed with the cursor mask
  7281. SeeAlso: AX=0009h,INT 62/AX=007Eh
  7282. --------M-33000B-----------------------------
  7283. INT 33 - MS MOUSE v1.0+ - READ MOTION COUNTERS
  7284.     AX = 000Bh
  7285. Return: CX = number of mickeys mouse moved horizontally since last call
  7286.     DX = number of mickeys mouse moved vertically
  7287. Notes:    a mickey is the smallest increment the mouse can sense
  7288.     positive values indicate down/right
  7289. SeeAlso: AX=0003h,AX=001Bh,AX=0027h
  7290. --------M-33000C-----------------------------
  7291. INT 33 - MS MOUSE v1.0+ - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  7292.     AX = 000Ch
  7293.     CX = call mask (see #2361)
  7294.     ES:DX -> FAR routine (see #2362)
  7295. SeeAlso: AX=0018h
  7296.  
  7297. Bitfields for mouse call mask:
  7298. Bit(s)    Description    (Table 2361)
  7299.  0    call if mouse moves
  7300.  1    call if left button pressed
  7301.  2    call if left button released
  7302.  3    call if right button pressed
  7303.  4    call if right button released
  7304.  5    call if middle button pressed (Mouse Systems/Logitech/Genius mouse)
  7305.  6    call if middle button released (Mouse Systems/Logitech/Genius mouse)
  7306.  7-15    unused
  7307. Note:    some versions of the Microsoft documentation incorrectly state that CX
  7308.       bit 0 means call if mouse cursor moves
  7309.  
  7310. (Table 2362)
  7311. Values interrupt routine is called with:
  7312.     AX = condition mask (same bit assignments as call mask)
  7313.     BX = button state
  7314.     CX = cursor column
  7315.     DX = cursor row
  7316.     SI = horizontal mickey count
  7317.     DI = vertical mickey count
  7318. Notes:    some versions of the Microsoft documentation erroneously swap the
  7319.       meanings of SI and DI
  7320.     in text modes, the row and column will be reported as a multiple of
  7321.       the character cell size, typically 8x8 pixels
  7322. --------M-33000D-----------------------------
  7323. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION ON
  7324.     AX = 000Dh
  7325. SeeAlso: AX=000Eh,INT 10/AH=04h
  7326. --------M-33000E-----------------------------
  7327. INT 33 - MS MOUSE v1.0+ - LIGHT PEN EMULATION OFF
  7328.     AX = 000Eh
  7329. SeeAlso: AX=000Dh
  7330. --------M-33000F-----------------------------
  7331. INT 33 - MS MOUSE v1.0+ - DEFINE MICKEY/PIXEL RATIO
  7332.     AX = 000Fh
  7333.     CX = number of mickeys per 8 pixels horizontally (default 8)
  7334.     DX = number of mickeys per 8 pixels vertically (default 16)
  7335. SeeAlso: AX=0013h,AX=001Ah,INT 62/AX=0082h
  7336. --------M-330010-----------------------------
  7337. INT 33 - MS MOUSE v1.0+ - DEFINE SCREEN REGION FOR UPDATING
  7338.     AX = 0010h
  7339.     CX,DX = X,Y coordinates of upper left corner
  7340.     SI,DI = X,Y coordinates of lower right corner
  7341. Note:    mouse cursor is hidden in the specified region, and needs to be
  7342.       explicitly turned on again
  7343. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"Genius MOUSE",AX=0031h
  7344. --------M-330010-----------------------------
  7345. INT 33 - Genius MOUSE - DEFINE SCREEN REGION FOR UPDATING
  7346.     AX = 0010h
  7347.     ES:DX -> update region list (see #2363)
  7348. Notes:    mouse cursor is hidden in the specified region, and needs to be
  7349.       explicitly turned on again
  7350.     this version of the call is described in an August 1988 version of the
  7351.       Genius Mouse programmer's reference; it has been changed to conform
  7352.       to the Microsoft version shown above by version 9.06 (and possibly
  7353.       earlier versions)
  7354. SeeAlso: AX=0001h,AX=0002h,AX=0007h,AX=0010h"MS MOUSE"
  7355.  
  7356. Format of Genius Mouse update region list:
  7357. Offset    Size    Description    (Table 2363)
  7358.  00h    WORD    left-most column
  7359.  02h    WORD    top-most row
  7360.  04h    WORD    right-most column
  7361.  06h    WORD    bottom-most row
  7362. --------M-330011-----------------------------
  7363. INT 33 - Genius Mouse 9.06 - GET NUMBER OF BUTTONS
  7364.     AX = 0011h
  7365. Return: AX = FFFFh
  7366.     BX = number of buttons
  7367. SeeAlso: AX=0000h
  7368. --------M-330012-----------------------------
  7369. INT 33 - MS MOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  7370.     AX = 0012h
  7371.     BH = cursor width in words
  7372.     CH = rows in cursor
  7373.     BL = horizontal hot spot (-16 to 16)
  7374.     CL = vertical hot spot (-16 to 16)
  7375.     ES:DX -> bit map of screen and cursor maps
  7376. Return: AX = FFFFh if successful
  7377. SeeAlso: AX=0009h,AX=002Ah,AX=0035h
  7378. --------M-330013-----------------------------
  7379. INT 33 - MS MOUSE v5.0+ - DEFINE DOUBLE-SPEED THRESHOLD
  7380.     AX = 0013h
  7381.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  7382. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  7383. SeeAlso: AX=000Fh,AX=001Bh,AX=002Ch
  7384. --------M-330014-----------------------------
  7385. INT 33 - MS MOUSE v3.0+ - EXCHANGE INTERRUPT SUBROUTINES
  7386.     AX = 0014h
  7387.     CX = call mask (see #2361)
  7388.     ES:DX -> FAR routine
  7389. Return: CX = call mask of previous interrupt routine
  7390.     ES:DX = FAR address of previous interrupt routine
  7391. SeeAlso: AX=000Ch,AX=0018h
  7392. --------M-330015-----------------------------
  7393. INT 33 - MS MOUSE v6.0+ - RETURN DRIVER STORAGE REQUIREMENTS
  7394.     AX = 0015h
  7395. Return: BX = size of buffer needed to store driver state
  7396. SeeAlso: AX=0016h,AX=0017h,AX=0042h
  7397. --------M-330016-----------------------------
  7398. INT 33 - MS MOUSE v6.0+ - SAVE DRIVER STATE
  7399.     AX = 0016h
  7400.     BX = size of buffer (see AX=0015h)
  7401.     ES:DX -> buffer for driver state
  7402. Note:    although not documented (since the Microsoft driver does not use it),
  7403.       many drivers appear to require BX on input
  7404. SeeAlso: AX=0015h,AX=0017h
  7405. --------M-330017-----------------------------
  7406. INT 33 - MS MOUSE v6.0+ - RESTORE DRIVER STATE
  7407.     AX = 0017h
  7408.     BX = size of buffer (see AX=0015h)
  7409.     ES:DX -> buffer containing saved state
  7410. Notes:    although not documented (since the Microsoft driver does not use it),
  7411.       many drivers appear to require BX on input
  7412.     some mouse drivers range-check the values in the saved state based on
  7413.       the current video mode; thus, the video mode should be restored
  7414.       before the mouse driver's state is restored
  7415. SeeAlso: AX=0015h,AX=0016h
  7416. --------M-330018-----------------------------
  7417. INT 33 - MS MOUSE v6.0+ - SET ALTERNATE MOUSE USER HANDLER
  7418.     AX = 0018h
  7419.     CX = call mask (see #2364)
  7420.     ES:DX -> FAR routine to be invoked on mouse events (see #2365)
  7421. Return: AX = status
  7422.         0018h if successful
  7423.         FFFFh on error
  7424. Notes:    up to three handlers can be defined by separate calls to this function,
  7425.       each with a different combination of shift states in the call mask;
  7426.       calling this function again with a call mask of 0000h undefines the
  7427.       specified handler (official documentation); specifying the same
  7428.       call mask and an address of 0000h:0000h undefines the handler (real
  7429.       life)
  7430.     some versions of the documentation erroneously reverse the order of
  7431.       the bits in the call mask
  7432. SeeAlso: AX=000Ch,AX=0014h,AX=0019h
  7433.  
  7434. Bitfields for mouse call mask:
  7435. Bit(s)    Description    (Table 2364)
  7436.  0    call if mouse moves
  7437.  1    call if left button pressed
  7438.  2    call if left button released
  7439.  3    call if right button pressed
  7440.  4    call if right button released
  7441.  5    call if shift button pressed during event
  7442.  6    call if ctrl key pressed during event
  7443.  7    call if alt key pressed during event
  7444. Note:    at least one of 5-7 must be set
  7445.  
  7446. (Table 2365)
  7447. Values user handler is called with:
  7448.     AX = condition mask (same bit assignments as call mask)
  7449.     BX = button state
  7450.     CX = cursor column
  7451.     DX = cursor row
  7452.     SI = horizontal mickey count
  7453.     DI = vertical mickey count
  7454. Return: registers preserved
  7455. Note:    in text modes, the row and column will be reported as a multiple of
  7456.       the cell size, typically 8x8 pixels
  7457. --------M-330019-----------------------------
  7458. INT 33 - MS MOUSE v6.0+ - RETURN USER ALTERNATE INTERRUPT VECTOR
  7459.     AX = 0019h
  7460.     CX = call mask (see #2364)
  7461. Return: BX:DX = user interrupt vector
  7462.     CX = call mask (0000h if not found)
  7463. Note:    attempts to find a user event handler (defined by function 18h)
  7464.       whose call mask matches CX
  7465. SeeAlso: AX=0018h
  7466. --------M-33001A-----------------------------
  7467. INT 33 - MS MOUSE v6.0+ - SET MOUSE SENSITIVITY
  7468.     AX = 001Ah
  7469.     BX = horizontal speed \
  7470.     CX = vertical speed   / (see AX=000Fh)
  7471.     DX = double speed threshold (see AX=0013h)
  7472. SeeAlso: AX=0013h,AX=001Bh,INT 62/AX=0082h
  7473. --------M-33001B-----------------------------
  7474. INT 33 - MS MOUSE v6.0+ - RETURN MOUSE SENSITIVITY
  7475.     AX = 001Bh
  7476. Return: BX = horizontal speed
  7477.     CX = vertical speed
  7478.     DX = double speed threshold
  7479. SeeAlso: AX=000Bh,AX=001Ah
  7480. --------M-33001C-----------------------------
  7481. INT 33 - MS MOUSE v6.0+ - SET INTERRUPT RATE
  7482.     AX = 001Ch
  7483.     BX = rate (see #2366)
  7484. Notes:    only available on InPort mouse
  7485.     values greater than 4 may cause unpredictable driver behavior
  7486.  
  7487. (Table 2366)
  7488. Values for mouse interrupt rate:
  7489.  00h    no interrupts allowed
  7490.  01h    30 per second
  7491.  02h    50 per second
  7492.  03h    100 per second
  7493.  04h    200 per second
  7494. --------M-33001D-----------------------------
  7495. INT 33 - MS MOUSE v6.0+ - DEFINE DISPLAY PAGE NUMBER
  7496.     AX = 001Dh
  7497.     BX = display page number
  7498. Note:    the cursor will be displayed on the specified page
  7499. SeeAlso: AX=001Eh
  7500. --------M-33001E-----------------------------
  7501. INT 33 - MS MOUSE v6.0+ - RETURN DISPLAY PAGE NUMBER
  7502.     AX = 001Eh
  7503. Return: BX = display page number
  7504. SeeAlso: AX=001Dh
  7505. --------M-33001F-----------------------------
  7506. INT 33 - MS MOUSE v6.0+ - DISABLE MOUSE DRIVER
  7507.     AX = 001Fh
  7508. Return: AX = status
  7509.         001Fh successful
  7510.         ES:BX = INT 33 vector before mouse driver was first installed
  7511.         FFFFh unsuccessful
  7512. Notes:    restores vectors for INT 10 and INT 71 (8086) or INT 74 (286/386)
  7513.     if you restore INT 33 to ES:BX, driver will be completely disabled
  7514.     many drivers return AX=001Fh even though the driver has been disabled
  7515. SeeAlso: AX=0020h
  7516. --------M-330020-----------------------------
  7517. INT 33 - MS MOUSE v6.0+ - ENABLE MOUSE DRIVER
  7518.     AX = 0020h
  7519. Return: AX = status
  7520.         0020h successful
  7521.         FFFFh unsuccessful
  7522. Notes:    restores vectors for INT 10h and INT 71h (8086) or INT 74h (286/386)
  7523.       which were removed by function 1Fh
  7524.     Microsoft's documentation states that no value is returned
  7525. SeeAlso: AX=001Fh
  7526. --------M-330021-----------------------------
  7527. INT 33 - MS MOUSE v6.0+ - SOFTWARE RESET
  7528.     AX = 0021h
  7529. Return: AX = status
  7530.         FFFFh if mouse driver installed
  7531.         BX = number of buttons (FFFFh = two buttons)
  7532.         0021h if mouse driver not installed
  7533. Note:    this call is identical to funtion 00h, but does not reset the mouse
  7534. SeeAlso: AX=0000h
  7535. --------M-330022-----------------------------
  7536. INT 33 - MS MOUSE v6.0+ - SET LANGUAGE FOR MESSAGES
  7537.     AX = 0022h
  7538.     BX = language (see #2367)
  7539. Note:    only available on international versions of the driver; US versions
  7540.       ignore this call
  7541. SeeAlso: AX=0023h
  7542.  
  7543. (Table 2367)
  7544. Values for mouse driver language:
  7545.  00h    English
  7546.  01h    French
  7547.  02h    Dutch
  7548.  03h    German
  7549.  04h    Swedish
  7550.  05h    Finnish
  7551.  06h    Spanish
  7552.  07h    Portugese
  7553.  08h    Italian
  7554. --------M-330023-----------------------------
  7555. INT 33 - MS MOUSE v6.0+ - GET LANGUAGE FOR MESSAGES
  7556.     AX = 0023h
  7557. Return: BX = language (see #2367)
  7558. Note:    the US version of the driver always returns zero
  7559. SeeAlso: AX=0022h
  7560. --------M-330024-----------------------------
  7561. INT 33 - MS MOUSE v6.26+ - GET SOFTWARE VERSION, MOUSE TYPE, AND IRQ NUMBER
  7562.     AX = 0024h
  7563. Return: AX = FFFFh on error
  7564.     otherwise,
  7565.         BH = major version
  7566.         BL = minor version
  7567.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  7568.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  7569. SeeAlso: AX=004Dh,AX=006Dh
  7570. --------M-330025-----------------------------
  7571. INT 33 - MS MOUSE v6.26+ - GET GENERAL DRIVER INFORMATION
  7572.     AX = 0025h
  7573. Return: AX = general information (see #2368)
  7574.     BX = cursor lock flag for OS/2 to prevent reentrancy problems
  7575.     CX = mouse code active flag (for OS/2)
  7576.     DX = mouse driver busy flag (for OS/2)
  7577.  
  7578. Bitfields for general mouse driver information:
  7579. Bit(s)    Description    (Table 2368)
  7580.  15    driver loaded as device driver rather than TSR
  7581.  14    driver is newer integrated type
  7582.  13,12    current cursor type
  7583.     00 software text cursor
  7584.     01 hardware text cursor (CRT Controller's cursor)
  7585.     1X graphics cursor
  7586.  11-8    interrupt rate (see #2366)
  7587.  7-0    count of currently-active Mouse Display Drivers (MDD), the newer
  7588.       integrated driver type
  7589. --------M-330026-----------------------------
  7590. INT 33 - MS MOUSE v6.26+ - GET MAXIMUM VIRTUAL COORDINATES
  7591.     AX = 0026h
  7592. Return: BX = mouse-disabled flag (0000h mouse enabled, nonzero disabled)
  7593.     CX = maximum virtual X (for current video mode)
  7594.     DX = maximum virtual Y
  7595. Note:    for driver versions before 7.05, this call returns the currently-set
  7596.       maximum coordinates; v7.05+ returns the absolute maximum coordinates
  7597. SeeAlso: AX=0031h
  7598. --------M-330026-----------------------------
  7599. INT 33 - Genius Mouse 9.06 - ???
  7600.     AX = 0026h
  7601. Return: CX = 0204h if CX was 0105h on entry, else unchanged
  7602. --------M-330027-----------------------------
  7603. INT 33 - MS MOUSE v7.01+ - GET SCREEN/CURSOR MASKS AND MICKEY COUNTS
  7604.     AX = 0027h
  7605. Return: AX = screen-mask value (or hardware cursor scan-line start for v7.02+)
  7606.     BX = cursor-mask value (or hardware cursor scan-line stop for v7.02+)
  7607.     CX = horizontal mickeys moved since last call
  7608.     DX = vertical mickeys moved since last call
  7609. SeeAlso: AX=000Bh
  7610. --------M-330028-----------------------------
  7611. INT 33 - MS MOUSE v7.0+ - SET VIDEO MODE
  7612.     AX = 0028h
  7613.     CX = new video mode (call is NOP if 0000h)
  7614.     DH = Y font size (00h = default)
  7615.     DL = X font size (00h = default)
  7616. Return: CL = status (00h = successful)
  7617. Notes:    DX is ignored unless the selected video mode supports font size control
  7618.     when CX=0000h, an internal flag that had been set by a previous call
  7619.       is cleared; this is required before a mouse reset
  7620. SeeAlso: AX=0029h,INT 10/AH=00h
  7621. --------M-330029-----------------------------
  7622. INT 33 - MS MOUSE v7.0+ - ENUMERATE VIDEO MODES
  7623.     AX = 0029h
  7624.     CX = previous video mode
  7625.         0000h get first supported video mode
  7626.         other get next supported mode after mode CX
  7627. Return: CX = first/next video mode (0000h = no more video modes)
  7628.     DS:DX -> description of video mode or 0000h:0000h if none
  7629. Notes:    the enumerated video modes may be in any order and may repeat
  7630.     the description string (if available) is terminated by '$' followed by
  7631.       a NUL byte
  7632. SeeAlso: AX=0028h
  7633. --------M-33002A-----------------------------
  7634. INT 33 - MS MOUSE v7.02+ - GET CURSOR HOT SPOT
  7635.     AX = 002Ah
  7636. Return: AX = internal counter controlling cursor visibility
  7637.     BX = cursor hot spot column
  7638.     CX = cursor hot spot row
  7639.     DX = mouse type (see #2369)
  7640. Note:    the hot spot location is relative to the upper left corner of the
  7641.       cursor block and may range from -128 to +127 both horizontally and
  7642.       vertically
  7643. SeeAlso: AX=0009h,AX=0012h,AX=0035h
  7644.  
  7645. (Table 2369)
  7646. Values for mouse type:
  7647.  00h    none
  7648.  01h    bus
  7649.  02h    serial
  7650.  03h    InPort
  7651.  04h    IBM
  7652.  05h    Hewlett-Packard
  7653. --------M-33002B-----------------------------
  7654. INT 33 - MS MOUSE v7.0+ - LOAD ACCELERATION PROFILES
  7655.     AX = 002Bh
  7656.     BX = active acceleration profile
  7657.         0001h-0004h or FFFFh to restore default curves
  7658.     ES:SI -> buffer containing acceleration profile data (see #2370)
  7659. Return: AX = success flag
  7660. SeeAlso: AX=002Ch,AX=002Dh,AX=0033h
  7661.  
  7662. Format of acceleration profile data:
  7663. Offset    Size    Description    (Table 2370)
  7664.  00h    BYTE    length of acceleration profile 1
  7665.  01h    BYTE    length of acceleration profile 2
  7666.  02h    BYTE    length of acceleration profile 3
  7667.  03h    BYTE    length of acceleration profile 4
  7668.  04h 32 BYTEs    threshold speeds for acceleration profile 1
  7669.  24h 32 BYTEs    threshold speeds for acceleration profile 2
  7670.  44h 32 BYTEs    threshold speeds for acceleration profile 3
  7671.  64h 32 BYTEs    threshold speeds for acceleration profile 4
  7672.  84h 32 BYTEs    speedup factor for acceleration profile 1
  7673.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7674.  A4h 32 BYTEs    speedup factor for acceleration profile 2
  7675.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7676.  C4h 32 BYTEs    speedup factor for acceleration profile 3
  7677.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7678.  E4h 32 BYTEs    speedup factor for acceleration profile 4
  7679.         (10h = 1.0, 14h = 1.25, 20h = 2.0, etc)
  7680. 104h 16 BYTEs    name of acceleration profile 1 (blank-padded)
  7681. 114h 16 BYTEs    name of acceleration profile 2 (blank-padded)
  7682. 124h 16 BYTEs    name of acceleration profile 3 (blank-padded)
  7683. 134h 16 BYTEs    name of acceleration profile 4 (blank-padded)
  7684. Note:    unused bytes in the threshold speed fields are filled with 7Fh and
  7685.       unused bytes in the speedup factor fields are filled with 10h
  7686. --------M-33002C-----------------------------
  7687. INT 33 - MS MOUSE v7.0+ - GET ACCELERATION PROFILES
  7688.     AX = 002Ch
  7689. Return: AX = status (0000h success)
  7690.     BX = currently-active acceleration profile
  7691.     ES:SI -> acceleration profile data (see #2370)
  7692. SeeAlso: AX=002Bh,AX=002Dh,AX=0033h
  7693. --------M-33002D-----------------------------
  7694. INT 33 - MS MOUSE v7.0+ - SELECT ACCELERATION PROFILE
  7695.     AX = 002Dh
  7696.     BX = acceleration level
  7697.         0001h-0004h to set profile, or FFFFh to get current profile
  7698. Return: AX = status
  7699.         0000h successful
  7700.         ES:SI -> 16-byte blank-padded name of acceleration profile
  7701.         FFFEh invalid acceleration curve number
  7702.         ES:SI destroyed
  7703.     BX = active acceleration curve number
  7704. SeeAlso: AX=0013h,AX=002Bh,AX=002Ch,AX=002Eh
  7705. --------M-33002E-----------------------------
  7706. INT 33 - MS MOUSE v8.10+ - SET ACCELERATION PROFILE NAMES
  7707.     AX = 002Eh
  7708.     BL = flag (if nonzero, fill ES:SI buffer with default names on return)
  7709.     ES:SI -> 64-byte buffer containing profile names (16 bytes per name)
  7710. Return: AX = status (0000h success)
  7711.         FFFEh error for ATI Mouse driver
  7712.     ES:SI buffer filled with default names if BL nonzero on entry
  7713. Notes:    not supported by Logitech driver v6.10
  7714.     supported by ATI Mouse driver v7.04
  7715. SeeAlso: AX=002Ch,AX=002Dh,AX=012Eh,AX=022Eh
  7716. --------M-33002F-----------------------------
  7717. INT 33 - MS MOUSE v7.02+ - MOUSE HARDWARE RESET
  7718.     AX = 002Fh
  7719. Return: AX = status
  7720. Note:    invoked by mouse driver v8.20 on being called with INT 2F/AX=530Bh
  7721. SeeAlso: INT 2F/AH=53h
  7722. --------M-330030-----------------------------
  7723. INT 33 - MS MOUSE v7.04+ - GET/SET BallPoint INFORMATION
  7724.     AX = 0030h
  7725.     CX = command
  7726.         0000h get status of BallPoint device
  7727.         other set rotation angle and masks
  7728.         BX = rotation angle (-32768 to 32767 degrees)
  7729.         CH = primary button mask
  7730.         CL = secondary button mask
  7731. Return: AX = button status (FFFFh if no BallPoint) (see #2371)
  7732.     BX = rotation angle (0-360 degrees)
  7733.     CH = primary button mask
  7734.     CL = secondary button mask
  7735. Note:    not supported by the ATI Mouse driver which calls itself v7.04
  7736.  
  7737. Bitfields for BallPoint mouse button status:
  7738. Bit(s)    Description    (Table 2371)
  7739.  5    button 1
  7740.  4    button 2
  7741.  3    button 3
  7742.  2    button 4
  7743.  other    zero
  7744. --------M-330031-----------------------------
  7745. INT 33 - MS MOUSE v7.05+ - GET CURRENT MINIMUM/MAXIMUM VIRTUAL COORDINATES
  7746.     AX = 0031h
  7747. Return: AX = virtual X minimum
  7748.     BX = virtual Y minimum
  7749.     CX = virtual X maximum
  7750.     DX = virtual Y maximum
  7751. Note:    the minimum and maximum values are those set by AX=0007h and AX=0008h;
  7752.       the default is minimum = 0 and maximum = absolute maximum
  7753.       (see AX=0026h)
  7754. SeeAlso: AX=0007h,AX=0008h,AX=0010h,AX=0026h
  7755. --------M-330032-----------------------------
  7756. INT 33 - MS MOUSE v7.05+ - GET ACTIVE ADVANCED FUNCTIONS
  7757.     AX = 0032h
  7758. Return: AX = active function flags (FFFFh for v8.10)
  7759.         bit 15: function 0025h supported
  7760.         bit 14: function 0026h supported
  7761.         ...
  7762.         bit 0:  function 0034h supported
  7763.     BX = ??? (0000h) officially unused
  7764.     CX = ??? (E000h) officially unused
  7765.     DX = ??? (0000h) officially unused
  7766. Note:    the Italian version of MS MOUSE v8.20 reportedly indicates that
  7767.       functions 0033h and 0034h are not supported even though they are
  7768. --------M-330033-----------------------------
  7769. INT 33 - MS MOUSE v7.05+ - GET SWITCH SETTINGS AND ACCELERATION PROFILE DATA
  7770.     AX = 0033h
  7771.     CX = size of buffer
  7772.         0000h get required buffer size
  7773.         Return: AX = 0000h
  7774.             CX = required size (0154h for Logitech v6.10, 0159h
  7775.                 for MS v8.10-8.20)
  7776.         other
  7777.         ES:DX -> buffer of CX bytes for mouse settings
  7778.         Return: AX = 0000h
  7779.             CX = number of bytes returned
  7780.             ES:DX buffer filled (see #2372)
  7781. SeeAlso: AX=002Bh
  7782.  
  7783. Format of mouse settings data buffer:
  7784. Offset    Size    Description    (Table 2372)
  7785.  00h    BYTE    mouse type
  7786.  01h    BYTE    current language
  7787.  02h    BYTE    horizontal sensitivity (00h-64h)
  7788.  03h    BYTE    vertical sensitivity (00h-64h)
  7789.  04h    BYTE    double-speed threshold (00h-64h)
  7790.  05h    BYTE    ballistic curve (01h-04h)
  7791.  06h    BYTE    interrupt rate (01h-04h)
  7792.  07h    BYTE    cursor override mask
  7793.  08h    BYTE    laptop adjustment
  7794.  09h    BYTE    memory type (00h-02h)
  7795.  0Ah    BYTE    SuperVGA support (00h,01h)
  7796.  0Bh    BYTE    rotation angle
  7797.  0Ch    BYTE    ???
  7798.  0Dh    BYTE    primary button (01h-04h)
  7799.  0Eh    BYTE    secondary button (01h-04h)
  7800.  0Fh    BYTE    click lock enabled (00h,01h)
  7801.  10h 324 BYTEs    acceleration profile data (see #2370)
  7802. 154h  5 BYTEs    ??? (Microsoft driver, but not Logitech)
  7803. --------M-330034-----------------------------
  7804. INT 33 - MS MOUSE v8.0+ - GET INITIALIZATION FILE
  7805.     AX = 0034h
  7806. Return: AX = status (0000h successful)
  7807.     ES:DX -> ASCIZ initialization (.INI) file name
  7808. --------M-330035-----------------------------
  7809. INT 33 - MS MOUSE v8.10+ - LCD SCREEN LARGE POINTER SUPPORT
  7810.     AX = 0035h
  7811.     BX = function
  7812.         FFFFh get current settings
  7813.         Return: AX = 0000h
  7814.             BH = style (see #2373)
  7815.             BL = size (see below)
  7816.             CH = threshold
  7817.             CL = active flag (00h disabled, 01h enabled)
  7818.             DX = delay
  7819.         other
  7820.         BH = pointer style (see #2373)
  7821.         BL = size (00h small "1", 01h medium "1.5", 02h large "2")
  7822.         CH = threshold (00h-64h)
  7823.         CL = active flag (00h disable size change, 01h enable)
  7824.         DX = delay (0000h-0064h)
  7825.         Return: AX = 0000h
  7826. Note:    not supported by Logitech driver v6.10
  7827. SeeAlso: AX=0012h,AX=002Ah
  7828.  
  7829. (Table 2373)
  7830. Values for pointer style:
  7831.  00h    normal
  7832.  01h    reverse
  7833.  02h    transparent
  7834. --------M-330042-----------------------------
  7835. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  7836.     AX = 0042h
  7837. Return: AX = status
  7838.         0000h MSMOUSE not installed
  7839.         0042h functions 42h, 50h, and 52h not supported
  7840.         FFFFh successful
  7841.         BX = buffer size in bytes for functions 50h and 52h
  7842. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7843. SeeAlso: AX=0015h,AX=0050h,AX=0052h
  7844. --------M-330043-----------------------------
  7845. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CONFIGURE MOUSE???
  7846.     AX = 0043h
  7847.     CX:BX -> configuration buffer (see #2374)
  7848.     DL = ???
  7849. Return: ???
  7850. Notes:    also calls routines for INT 33/AX=0053h and INT 33/AX=004Fh
  7851.     this function is also supported by the Genius Mouse 9.06 driver
  7852.  
  7853. Format of Mouse Systems configuration buffer:
  7854. Offset    Size    Description    (Table 2374)
  7855.  00h    WORD    I/O port address
  7856.  02h    BYTE    ???
  7857.  03h    BYTE    interrupt number
  7858.  04h    BYTE    interrupt mask for interrupt controller
  7859.  05h  5 BYTEs    ???
  7860. --------M-330044CXCDEF-----------------------
  7861. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE IGNORE ACCELERATION CMDS
  7862.     AX = 0044h
  7863.     CX = CDEFh
  7864. Return: AX = new state of "Ignore Application Acceleration Commands" flag
  7865. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7866. SeeAlso: AX=0045h
  7867. --------M-330045CXCDEF-----------------------
  7868. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - TOGGLE RESOLUTION DOUBLING
  7869.     AX = 0045h
  7870.     CX = CDEFh
  7871. Return: AX = new state of resolution doubling flag
  7872. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7873. SeeAlso: AX=0044h
  7874. --------M-330047-----------------------------
  7875. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET BUTTON ASSIGNMENTS
  7876.     AX = 0047h
  7877.     ES:BX -> button assignments (3 bytes, combinations of "L", "M", "R")
  7878. Return: ???
  7879. Note:    also supported by Genius Mouse 9.06 driver
  7880. SeeAlso: AX=0067h
  7881. --------M-330048BXCDEF-----------------------
  7882. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET ???
  7883.     AX = 0048h
  7884.     BX = CDEFh
  7885. Return: CX = ???
  7886.     BH = ???
  7887.     BL = ??? (if 50h, driver is using PS/2 pointing device BIOS interface)
  7888. Note:    also supported by Genius Mouse 9.06 driver
  7889. --------M-33004B-----------------------------
  7890. INT 33 - LCS/Telegraphics MOUSE DRIVERS - INSTALLATION CHECK / GET VERSION
  7891.     AX = 004Bh
  7892. Return: ES:DI -> ASCIZ signature/description string if installed (see #2375)
  7893.  
  7894. (Table 2375)
  7895. Values for LCS/Telegraphics mouse driver OEM signature/description string:
  7896.  "Primax Generic;Universal Mouse Driver;IMOUSE;v8.20i"
  7897.  "Synaptics;TouchPad Driver;SYNTOUCH;v2.26"
  7898.  "Z-NIX;BUS,AUX,Serial 3-byte and 5-byte Mouse Driver;ZMOUSE;v7.04d"
  7899. Note:    the string consists of OEM, driver description, driver name, and
  7900.       version number
  7901. --------M-33004CBXCDEF-----------------------
  7902. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ??? FLAG
  7903.     AX = 004Ch
  7904.     BX = CDEFh
  7905. Note:    also supported by Genius Mouse 9.06
  7906. SeeAlso: AX=006Ch
  7907. --------M-33004D-----------------------------
  7908. INT 33 - MS MOUSE - RETURN POINTER TO COPYRIGHT STRING
  7909.     AX = 004Dh
  7910. Return: ES:DI -> copyright message "*** This is Copyright 1983 Microsoft" or
  7911.         "Copyright 19XX...."
  7912. Notes:    also supported by Logitech, Kraft, Genius Mouse, and Mouse Systems
  7913.       mouse drivers
  7914.     in the Genius Mouse 9.06 driver, the ASCIZ signature "KYE" immediately
  7915.       follows the above copyright message (KYE Corp. manufactures the
  7916.       driver)
  7917. SeeAlso: AX=0024h,AX=006Dh,AX=0666h
  7918. --------M-33004F-----------------------------
  7919. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ENABLE MOUSE
  7920.     AX = 004Fh
  7921. Return: nothing
  7922. Note:    also supported by Genius Mouse 9.06
  7923. SeeAlso: AX=0043h,AX=0053h
  7924. --------M-330050-----------------------------
  7925. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  7926.     AX = 0050h
  7927.     BX = buffer size (ignored by some driver versions)
  7928.     ES:DX -> buffer
  7929. Return: AX = FFFFh if successful
  7930. Notes:    the buffer must be large enough to hold the entire state, or following
  7931.       data will be overwritten by state data in versions which ignore BX;
  7932.       use INT 33/AX=0042h to get the required size
  7933.     this function is also supported by the Genius Mouse 9.06 driver
  7934. SeeAlso: AX=0042h,AX=0052h
  7935. --------M-330052-----------------------------
  7936. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  7937.     AX = 0052h
  7938.     BX = buffer size (ignored by some driver versions)
  7939.     ES:DX -> buffer
  7940. Return: AX = FFFFh if successful
  7941. Note:    also supported by Genius Mouse 9.06 driver
  7942. SeeAlso: AX=0050h
  7943. --------M-330053-----------------------------
  7944. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - DISABLE MOUSE
  7945.     AX = 0053h
  7946. Return: nothing
  7947. Note:    also supported by Genius Mouse 9.06
  7948. SeeAlso: AX=0043h,AX=004Fh
  7949. --------M-330054CXCDEF-----------------------
  7950. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SELECT ULTRARES ACCELERATION LEVEL
  7951.     AX = 0054h
  7952.     CX = CDEFh
  7953.     BX = new acceleration level (0-9)
  7954. Return: ???
  7955. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7956. SeeAlso: AX=005Ah
  7957. --------M-330055-----------------------------
  7958. INT 33 - Kraft Mouse - GET ???
  7959.     AX = 0055h
  7960. Return: CX = ???
  7961.     DX = ???
  7962.     ES = ???
  7963. --------M-330058-----------------------------
  7964. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  7965.     AX = 0058h
  7966. Return: AX = CS of driver
  7967.     CX:BX = original INT 33 vector
  7968.     DX = ???
  7969. Note:    this function is also supported by the Genius Mouse 9.06 driver
  7970. --------M-33005A-----------------------------
  7971. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - SET ULTRARES ACCELERATIONS
  7972.     AX = 005Ah
  7973.     CX = number of WORDs to copy (max 0014h, but not range-checked)
  7974.     DX:SI -> buffer containing thresholds??? (CX words)
  7975.     DX:BX -> buffer containing acceleration values???
  7976.         (9*14h words, only first CX of each 14h used)
  7977.     ???
  7978. Return: CF clear
  7979.     ???
  7980. Note:    this function is also supported by Genius Mouse 9.06
  7981. SeeAlso: AX=0054h
  7982. --------M-330061BXCDEF-----------------------
  7983. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  7984.     AX = 0061h
  7985.     BX = CDEFh
  7986. Return: CX = ???
  7987. Note:    also supported by Genius Mouse 9.06
  7988. --------M-330067-----------------------------
  7989. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET MOUSE BUTTONS???
  7990.     AX = 0067h
  7991. Return: BL = number of buttons???
  7992. Note:    also supported by Genius Mouse 9.06
  7993. SeeAlso: AX=0047h
  7994. --------M-33006A-----------------------------
  7995. INT 33 U - ATI Mouse - INSTALLATION CHECK
  7996.     AX = 006Ah
  7997. Return: AL = AAh
  7998.     AH = ???
  7999.     BH = ???
  8000.     BL = ???
  8001.     CL = ???
  8002.     CH = ???
  8003. Program: ATI's MOUSE.COM and MOUSE.SYS are drivers for the mouse port found on
  8004.       some of ATI's video adapters
  8005. SeeAlso: AX=006Dh
  8006. --------M-33006C-----------------------------
  8007. INT 33 U - TRUEDOX Mouse driver v4.01 - GET/SET HARDWARE PARAMETERS
  8008.     AX = 006Ch
  8009.     BX = new IRQ (0003h or 0004h), or 0000h to get current values only
  8010.     CL = new IRQmask (sent to 8259)
  8011.     DX = new base I/O port
  8012. Return: BX = current IRQ
  8013.     DX = light pen state???
  8014. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  8015.       TRUEDOX Technology Corporation
  8016. SeeAlso: AX=00A1h,AX=0666h
  8017. --------M-33006CBXCDEF-----------------------
  8018. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - CLEAR ??? FLAG
  8019.     AX = 006Ch
  8020.     BX = CDEFh
  8021. Note:    also supported by Genius Mouse 9.06
  8022. SeeAlso: AX=004Ch
  8023. --------M-33006D-----------------------------
  8024. INT 33 - MS MOUSE - GET VERSION STRING
  8025.     AX = 006Dh
  8026. Return: ES:DI -> Microsoft version number of resident driver (see #2376)
  8027. Notes:    also supported by Logitech, Mouse Systems, Kraft, and Genius mouse
  8028.       drivers
  8029.     the Mouse Systems 7.01 and Genius Mouse 9.06 drivers report their
  8030.       Microsoft version as 7.00 even though they do not support any of the
  8031.       functions from 0025h through 002Dh supported by the MS 7.00 driver
  8032.       (the Genius Mouse driver supports function 0026h, but it differs
  8033.       from the Microsoft function)
  8034.     the TRUEDOX 4.01 driver reports its version as 6.26 through this call,
  8035.       but as 6.24 through AX=0024h
  8036. SeeAlso: AX=0024h,AX=004Dh,AX=006Ah,AX=266Ch
  8037.  
  8038. Format of Microsoft version number:
  8039. Offset    Size    Description    (Table 2376)
  8040.  00h    BYTE    major version
  8041.  01h    BYTE    minor version (BCD)
  8042. --------M-330070BXABCD-----------------------
  8043. INT 33 - Mouse Systems MOUSE DRIVER - POPUP.COM - INSTALLATION CHECK
  8044.     AX = 0070h
  8045.     BX = ABCDh
  8046. Return: AX = ABCDh if installed
  8047.         BX:CX -> data structure (see #2377)
  8048. Notes:    this function is also supported by the Genius Mouse 9.06 driver
  8049.     the v7.01 POPUP.COM and menu drivers also check for the signature
  8050.       CDh ABh BAh DCh at offset -2Ch from the interrupt handler
  8051.     if POPUP is not loaded, the returned data structure contains the proper
  8052.       signature at offset 00h, but not at offset 08h
  8053.  
  8054. Format of Mouse Systems POPUP.COM data structure:
  8055. Offset    Size    Description    (Table 2377)
  8056.  00h    WORD    signature ABCDh
  8057.  02h    DWORD    pointer to info structure??? (see #2378)
  8058.  06h  2 BYTEs    ???
  8059.  08h    WORD    signature ABCDh
  8060.  
  8061. Format of Mouse Systems POPUP.COM info structure:
  8062. Offset    Size    Description    (Table 2378)
  8063.  00h    WORD    driver version
  8064.  02h  8 BYTEs    ???
  8065.  0Ah    WORD    segment of ???
  8066.     ???
  8067. --------M-330072BXABCD-----------------------
  8068. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - ???
  8069.     AX = 0072h
  8070.     BX = ABCDh
  8071. Return: ???
  8072. Note:    this function is also supported by the Genius Mouse 9.06 driver
  8073. --------M-330073BXCDEF-----------------------
  8074. INT 33 - Mouse Systems MOUSE DRIVER v7.01+ - GET BUTTON ASSIGNMENTS
  8075.     AX = 0073h
  8076.     BX = CDEFh
  8077.     ES:DX -> 3-byte buffer for button assignments
  8078. Return: CX = number of buttons???
  8079.     ES:DX buffer filled (default is "LMR")
  8080. Note:    also supported by Genius Mouse 9.06
  8081. SeeAlso: AX=0067h
  8082. --------M-3300A0-----------------------------
  8083. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE PC MODE (3 button)
  8084.     AX = 00A0h
  8085. Return: nothing
  8086. Note:    this function is only available if the mouse mode is switchable
  8087.       through the power pins
  8088. SeeAlso: AX=006Ch"TRUEDOX",AX=00A1h"TRUEDOX"
  8089. --------M-3300A1-----------------------------
  8090. INT 33 U - TRUEDOX Mouse driver - SET HARDWARE MS MODE (2 button)
  8091.     AX = 00A1h
  8092. Return: nothing
  8093. Notes:    this function is only available if the mouse mode is switchable
  8094.       through the power pins
  8095.     this is the mouse driver for the Dell Dimension series of computers, by
  8096.       TRUEDOX Technology Corporation
  8097. SeeAlso: AX=006Ch"TRUEDOX",AX=00A0h"TRUEDOX",AX=00A6h,AX=0666h
  8098. --------M-3300A6-----------------------------
  8099. INT 33 U - TRUEDOX Mouse driver - SET RESOLUTION
  8100.     AX = 00A6h
  8101.     BX = new software resolution
  8102.         0001h 50-200 dpi
  8103.         0002h 200-400 dpi
  8104.         0003h 400-800 dpi
  8105. Note:    this is the mouse driver for the Dell Dimension series of computers, by
  8106.       TRUEDOX Technology Corporation
  8107. SeeAlso: AX=00A0h,AX=00A1h,AX=0666h
  8108. --------M-3300B0-----------------------------
  8109. INT 33 U - LCS/Telegraphics MOUSE DRIVERS - ???
  8110.     AX = 00B0h
  8111.     ???
  8112. Return: ???
  8113. --------M-3300F0-----------------------------
  8114. INT 33 U - LCS/Telegraphics MOUSE DRIVERS - ???
  8115.     AX = 00F0h
  8116.     ???
  8117. Return: ???
  8118. --------M-3300F1-----------------------------
  8119. INT 33 U - LCS/Telegraphics MOUSE DRIVERS - ???
  8120.     AX = 00F1h
  8121.     ???
  8122. Return: ???
  8123. --------M-3300F2-----------------------------
  8124. INT 33 U - LCS/Telegraphics MOUSE DRIVERS - ???
  8125.     AX = 00F2h
  8126.     ???
  8127. Return: ???
  8128. --------M-3300F3-----------------------------
  8129. INT 33 U - LCS/Telegraphics MOUSE DRIVERS - ???
  8130.     AX = 00F3h
  8131.     ???
  8132. Return: ???
  8133. --------M-330100CX4752-----------------------
  8134. INT 33 - GRTMOUSE v1.00+ - INSTALLATION CHECK
  8135.     AX = 0100h
  8136.     CX = 4752h ('GR')
  8137.     DX = 544Dh ('TM')
  8138. Return: AX = 474Dh ('GM') if installed
  8139.         CX = version number (CH = major, CL = minor)
  8140. Program: GRTMOUSE is a graphical-cursor driver for textmode by Tommer Leyvand
  8141. SeeAlso: AX=0101h,AX=0102h,AX=0103h,AX=0104h
  8142. --------M-330101-----------------------------
  8143. INT 33 - GRTMOUSE v1.00+ - SET MOUSE CURSOR SHAPE
  8144.     AX = 0101h
  8145.     DS:SI -> 16-byte cursor pattern
  8146. Return: CF clear if successful
  8147. SeeAlso: AX=0100h,AX=0102h
  8148. --------M-330102-----------------------------
  8149. INT 33 - GRTMOUSE v1.00+ - GET MOUSE CURSOR SHAPE
  8150.     AX = 0102h
  8151.     ES:DI -> 16-byte buffer for cursor pattern
  8152. SeeAlso: AX=0100h,AX=0101h
  8153. --------M-330103-----------------------------
  8154. INT 33 - GRTMOUSE v1.00+ - SET ACTIVE CHARACTERS
  8155.     AX = 0103h
  8156.     CH,CL,DH,DL = ASCII codes to be remapped to display mouse pointer
  8157. Note:    the default active characters are D0h,D1h,D6h,D8h; the active
  8158.      characters should be in the range C0h to DFh
  8159. SeeAlso: AX=0100h,AX=0104h
  8160. --------M-330104-----------------------------
  8161. INT 33 - GRTMOUSE v1.00+ - GET ACTIVE CHARACTERS
  8162.     AX = 0104h
  8163. Return: CH,CL,DH,DL = ASCII codes for the active characters
  8164. SeeAlso: AX=0100h,AX=0103h
  8165. --------M-33012E-----------------------------
  8166. INT 33 - MS MOUSE v8.10+ - ???
  8167.     AX = 012Eh
  8168.     BL = ???
  8169. Return: AX = 0000h (MS)
  8170.     AX = FFFFh (ATI Mouse v7.04)
  8171. Note:    not supported by Logitech driver v6.10
  8172. SeeAlso: AX=002Eh,AX=022Eh
  8173. --------M-33022E-----------------------------
  8174. INT 33 - MS MOUSE v8.10+ - ???
  8175.     AX = 022Eh
  8176.     BL = ???
  8177. Return: AX = 0000h (MS)
  8178.     AX = FFFFh (ATI Mouse v7.04)
  8179. Note:    not supported by Logitech driver v6.10
  8180. SeeAlso: AX=002Eh,AX=012Eh
  8181. --------M-330666-----------------------------
  8182. INT 33 U - TRUEDOX Mouse driver v4.01 - GET COPYRIGHT STRING
  8183.     AX = 0666h
  8184. Return: DX:AX -> ASCII "Copyright 1987-1992 TRUEDOX Technology Corporation"
  8185. Note:    this is the mouse driver for the Dell Dimension series of computers,
  8186.       by TRUEDOX Technology Corporation
  8187. SeeAlso: AX=004Dh,AX=00A6h,AX=0666h
  8188. --------M-33136C-----------------------------
  8189. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8190.     AX = 136Ch
  8191.     BX = ???
  8192. Return: AX = ???
  8193.     BX = ???
  8194. --------M-33146C-----------------------------
  8195. INT 33 - LOGITECH MOUSE v6.10+ - GET/SET ???
  8196.     AX = 146Ch
  8197.     BL = function
  8198.         00h set ???
  8199.         BH = new value (zero/nonzero to clear/set)
  8200.         else get ???
  8201.         Return: ???
  8202. --------M-33156C-----------------------------
  8203. INT 33 - LOGITECH MOUSE v6.10+ - GET SIGNATURE AND VERSION STRINGS
  8204.     AX = 156Ch
  8205. Return: ES:DI -> signature "LOGITECH MOUSE DRIVER"
  8206.     ES:SI -> version string, terminated with CRLF
  8207. --------M-33166C-----------------------------
  8208. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8209.     AX = 166Ch
  8210.     BL = ???
  8211.         00h ???
  8212.         01h ???
  8213.         other ???
  8214.         BH = new value of ???
  8215.         Return: AX = FFFFh
  8216. --------M-33176C-----------------------------
  8217. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8218.     AX = 176Ch
  8219.     ???
  8220. Return: ???
  8221. --------M-33186C-----------------------------
  8222. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8223.     AX = 186Ch
  8224.     ???
  8225. Return: ???
  8226. --------M-33196C-----------------------------
  8227. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8228.     AX = 196Ch
  8229.     ???
  8230. Return: ???
  8231. --------M-331A6C-----------------------------
  8232. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  8233.     AX = 1A6Ch
  8234. Return: AX = FFFFh
  8235.     BX = ???
  8236.     CX = ???
  8237. SeeAlso: AX=1B6Ch
  8238. --------M-331B6C-----------------------------
  8239. INT 33 - LOGITECH MOUSE v6.10+ - SET ???
  8240.     AX = 1B6Ch
  8241.     BX = new value for ??? (0000h-0003h)
  8242. Return: AX = FFFFh
  8243. SeeAlso: AX=1A6Ch
  8244. --------M-331C6C-----------------------------
  8245. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8246.     AX = 1C6Ch
  8247.     BX = ???
  8248.         <42h ???
  8249.         =42h ???
  8250.         >42h ???
  8251.         ES:DI -> ???
  8252.         Return: AX = ???
  8253. --------M-331D6C-----------------------------
  8254. INT 33 - LOGITECH MOUSE - GET COMPASS PARAMETER
  8255.     AX = 1D6Ch
  8256. Return: BX = direction (0=north, 1=south, 2=east, 3=west)
  8257. SeeAlso: AX=1E6Ch
  8258. --------M-331E6C-----------------------------
  8259. INT 33 - LOGITECH MOUSE - SET COMPASS PARAMETER
  8260.     AX = 1E6Ch
  8261.     BX = direction (0=north, 1=south, 2=east, 3=west)
  8262. SeeAlso: AX=1D6Ch
  8263. --------M-331F6C-----------------------------
  8264. INT 33 - LOGITECH MOUSE - GET BALLISTICS INFORMATION
  8265.     AX = 1F6Ch
  8266. Return: BX = 0=off, 1=on
  8267.     CX = 1=low, 2=high
  8268. SeeAlso: AX=002Ch,AX=236Ch
  8269. --------M-33206C-----------------------------
  8270. INT 33 - LOGITECH MOUSE - SET LEFT OR RIGHT PARAMETER
  8271.     AX = 206Ch
  8272.     BX = parameter (00h = right, FFh = left)
  8273. SeeAlso: AX=216Ch
  8274. --------M-33216C-----------------------------
  8275. INT 33 - LOGITECH MOUSE - GET LEFT OR RIGHT PARAMETER
  8276.     AX = 216Ch
  8277. Return: BX = parameter (00h = right, FFh = left)
  8278. SeeAlso: AX=206Ch
  8279. --------M-33226C-----------------------------
  8280. INT 33 - LOGITECH MOUSE - REMOVE DRIVER FROM MEMORY
  8281.     AX = 226Ch
  8282. Note:    this only frees memory; does not restore hooked interrupts
  8283. --------M-33236C-----------------------------
  8284. INT 33 - LOGITECH MOUSE - SET BALLISTICS INFORMATION
  8285.     AX = 236Ch
  8286.     BX = 0=off, 1=on
  8287.     CX = 1=low, 2=high
  8288. SeeAlso: AX=002Ch,AX=1F6Ch
  8289. --------M-33246C-----------------------------
  8290. INT 33 - LOGITECH MOUSE - GET PARAMETERS AND RESET SERIAL MOUSE
  8291.     AX = 246Ch
  8292.     ES:DX -> parameter table buffer (see #2379)
  8293. Return: AX = FFFFh if driver installed for serial mouse
  8294. SeeAlso: AX=0000h,AX=256Ch/BX=0000h,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h
  8295.  
  8296. Format of Logitech Mouse parameter table:
  8297. Offset    Size    Description    (Table 2379)
  8298.  00h    WORD    baud rate divided by 100  (serial mouse only)
  8299.  02h    WORD    emulation          (serial mouse only)
  8300.  04h    WORD    report rate          (serial mouse only)
  8301.  06h    WORD    firmware revision      (serial mouse only)
  8302.  08h    WORD    00h              (serial mouse only)
  8303.  0Ah    WORD    port              (serial mouse only)
  8304.  0Ch    WORD    physical buttons
  8305.  0Eh    WORD    logical buttons
  8306. --------M-33256CBX0000-----------------------
  8307. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET BAUD RATE (SERIAL MOUSE ONLY)
  8308.     AX = 256Ch
  8309.     BX = 0000h
  8310.     CX = rate (0=1200, 1=2400, 2=4800, 3=9600)
  8311. Return: AX = FFFFh if driver installed for serial mouse
  8312. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0002h,AX=276Ch
  8313. --------M-33256CBX0001-----------------------
  8314. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET EMULATION (SERIAL MOUSE ONLY)
  8315.     AX = 256Ch
  8316.     BX = 0001h
  8317.     CX = emulation type (see #2380)
  8318. Return: AX = FFFFh if driver installed for serial mouse
  8319. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0003h,AX=276Ch
  8320.  
  8321. (Table 2380)
  8322. Values for Logitech mouse emulation type:
  8323.  00h    5 byte packed binary
  8324.  01h    3 byte packed binary
  8325.  02h    hexadecimal
  8326.  03h    relative bit pad
  8327.  04h    not supported
  8328.  05h    MM Series
  8329.  06h    not supported
  8330.  07h    Microsoft
  8331. --------M-33256CBX0002-----------------------
  8332. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET REPORT RATE (SERIAL MOUSE ONLY)
  8333.     AX = 256Ch
  8334.     BX = 0002h
  8335.     CX = rate (0=10, 1=20, 2=35, 3=50, 4=70, 5=100, 6=150)
  8336. Return: AX = FFFFh if driver installed for serial mouse
  8337. SeeAlso: AX=246Ch,AX=256Ch/BX=0001h,AX=256Ch/BX=0003h,AX=276Ch
  8338. --------M-33256CBX0003-----------------------
  8339. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE PORT (SERIAL MOUSE ONLY)
  8340.     AX = 256Ch
  8341.     BX = 0003h
  8342.     CX = port (1, 2)
  8343. Return: AX = FFFFh if driver installed for serial mouse
  8344. SeeAlso: AX=246Ch,AX=256Ch/BX=0000h,AX=256Ch/BX=0004h,AX=276Ch
  8345. --------M-33256CBX0004-----------------------
  8346. INT 33 - LOGITECH MOUSE - SET PARAMETERS - SET MOUSE LOGICAL BUTTONS
  8347.     AX = 256Ch
  8348.     BX = 0004h
  8349.     CX = buttons (2, 3)
  8350. Return: AX = FFFFh if driver installed for serial mouse
  8351. SeeAlso: AX=246Ch,AX=276Ch
  8352. --------M-33266C-----------------------------
  8353. INT 33 - LOGITECH MOUSE - GET VERSION???
  8354.     AX = 266Ch
  8355. Return: BX = 'SS'
  8356.     CH = '4'  major version number
  8357.     CL = '1'  minor version number
  8358. SeeAlso: AX=006Dh
  8359. --------M-33276C-----------------------------
  8360. INT 33 - LOGITECH MOUSE - ??? Tries MMSeries, Baud 2400
  8361.     AX = 276Ch
  8362. SeeAlso: AX=256Ch
  8363. --------M-333000-----------------------------
  8364. INT 33 - Smooth Mouse Driver, PrecisePoint - INSTALLATION CHECK
  8365.     AX = 3000h
  8366. Return: AX = FFFFh if installed
  8367.         BX = version number (BH = major, BL = minor)
  8368. Program: SMD is a programmer's library by Andy Hakim which provides a
  8369.       graphics-style mouse cursor in text mode.  PrecisePoint is an
  8370.       SMD-based TSR which replaces the block mouse cursor in text
  8371.       applications.
  8372. SeeAlso: AX=0000h,AX=3001h,AX=3003h
  8373. --------M-333001-----------------------------
  8374. INT 33 - Smooth Mouse Driver, PrecisePoint - ENABLE SMOOTH MOUSE
  8375.     AX = 3001h
  8376. Return: AX = status (0000h = disabled, 0001h = enabled)
  8377. Note:    SMD remains disabled if running under Desqview or in graphics mode
  8378. SeeAlso: AX=0001h,AX=0002h,AX=3002h
  8379. --------M-333002-----------------------------
  8380. INT 33 - Smooth Mouse Driver, PrecisePoint - DISABLE SMOOTH MOUSE
  8381.     AX = 3002h
  8382. Return: AX = status (0000h = disabled, 0001h = enabled)
  8383. SeeAlso: AX=0001h,AX=0002h,AX=3000h,AX=3001h
  8384. --------M-333003-----------------------------
  8385. INT 33 - Smooth Mouse Driver, PrecisePoint - GET INFORMATION
  8386.     AX = 3003h
  8387.     BL = data structure selector
  8388.         00h Primary Bitmap (used for 25 line mode) (see #2381)
  8389.         01h Secondary Bitmap (used for 43/50 line modes) (see #2381)
  8390.         02h Sacrifice Character Map (see #2382)
  8391.         03h Program Information (see #2383)
  8392. Return: ES:DX -> selected data structure
  8393. SeeAlso: AX=3000h
  8394.  
  8395. Format of Primary/Secondary Bitmap [SMD_BITMAP_STRUCT]:
  8396. Offset    Size    Description    (Table 2381)
  8397.  00h    BYTE    vertical size of bitmap (00h - 10h)
  8398.  01h    BYTE    horizontal size of bitmap (00h - 10h)
  8399.  02h    BYTE    vertical hotspot position (00h - 10h)
  8400.  03h    BYTE    horizontal hotspot position (00h - 10h)
  8401.  04h 16 WORDs    cursor bitmap data
  8402.  14h 16 WORDs    screen bitmap data
  8403.  
  8404. Format of Sacrifice Character Map [SMD_SMAP_STRUCT]:
  8405. Offset    Size    Description    (Table 2382)
  8406.  00h    BYTE    bytes are character values (00h-FFh) used in place of the
  8407.  01h    BYTE    actual character for the corresponding position on the screen
  8408.  02h    BYTE         +--------------+      occupied by part or all of the mouse
  8409.  03h    BYTE         | 0h | 1h | 2h |      cursor
  8410.  04h    BYTE         |----+----+----|
  8411.  05h    BYTE         | 3h | 4h | 5h |
  8412.  06h    BYTE         |----+----+----|
  8413.  07h    BYTE         | 6h | 7h | 8h |
  8414.  08h    BYTE         +--------------+
  8415.  
  8416. Format of Program Information [SMD_INFO_STRUCT]:
  8417. Offset    Size    Description    (Table 2383)
  8418.  00h    WORD    segment of old interrupt 33h handler
  8419.  02h    WORD    offset of old interrupt 33h handler
  8420.  04h    WORD    PSP of SMD
  8421.  06h    BYTE    ENABLE/DISABLE manual setting status
  8422.  07h    BYTE    ENABLE/DISABLE internal usage status
  8423. --------M-333004-----------------------------
  8424. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  8425.     AX = 3004h
  8426. SeeAlso: AX=3000h
  8427. --------M-333005-----------------------------
  8428. INT 33 - Smooth Mouse Driver, PrecisePoint - RESERVED FUTURE EXPANSION
  8429.     AX = 3005h
  8430. SeeAlso: AX=3000h
  8431. --------M-334F00-----------------------------
  8432. INT 33 - LOGITECH MOUSE v6.10+ - GET ???
  8433.     AX = 4F00h
  8434. Return: AX = 004Fh if supported
  8435.     BX = ???
  8436.     ES:DI -> ???
  8437. SeeAlso: AX=4F01h
  8438. --------M-334F01-----------------------------
  8439. INT 33 - LOGITECH MOUSE v6.10+ - ???
  8440.     AX = 4F01h
  8441.     ES = ???
  8442. Return: AX = 004Fh if supported
  8443.     ES:DI -> ???
  8444. SeeAlso: AX=4F00h
  8445. --------M-336F00-----------------------------
  8446. INT 33 - Hewlett Packard - HP MOUSE DRIVER INSTALLATION CHECK
  8447.     AX = 6F00h
  8448.     BX <> 4850h
  8449. Return: BX = 4850h ('HP') if mouse driver written by Hewlett Packard
  8450. SeeAlso: INT 10/AX=6F00h,INT 14/AX=6F00h,INT 16/AX=6F00h,INT 17/AX=6F00h
  8451. --------M-338800-----------------------------
  8452. INT 33 U - InfoTrack IMOUSE.COM - UNHOOK MOUSE IRQ
  8453.     AX = 8800h
  8454.     BX <> FFFFh
  8455. Note:    the code is written to expect a subfunction number in AL, but only
  8456.       function 00h has been implemented
  8457. SeeAlso: AX=8800h/BX=FFFFh
  8458. --------M-338800BXFFFF-----------------------
  8459. INT 33 U - InfoTrack IMOUSE.COM - GET ACTIVE IRQ
  8460.     AX = 8800h
  8461.     BX = FFFFh
  8462. Return: BL = number of IRQ being used by the mouse
  8463. SeeAlso: AX=8800h
  8464. --------T-33FFE6-----------------------------
  8465. INT 33 - Switch-It v3.23 - GET ??? PROGRAM
  8466.     AX = FFE6h
  8467.     CX = length of buffer
  8468.     ES:DI -> buffer for program name
  8469. Return: ES:DI buffer filled
  8470. Program: Switch-It is a task switcher supporting up to 100 programs
  8471.       simultaneously by Better Software Technology, Inc.
  8472. --------T-33FFE7-----------------------------
  8473. INT 33 - Switch-It v3.23 - GET ???
  8474.     AX = FFE7h
  8475. Return: AX = ???
  8476. --------T-33FFE8-----------------------------
  8477. INT 33 - Switch-It v3.23 - ???
  8478.     AX = FFE8h
  8479.     CX = length of name including terminating NUL
  8480.     DS:SI -> ASCIZ program pathname
  8481. --------T-33FFE9-----------------------------
  8482. INT 33 - Switch-It v3.23 - SET ???
  8483.     AX = FFE9h
  8484.     BX = ???
  8485. --------T-33FFEA-----------------------------
  8486. INT 33 - Switch-It v3.23 - SET ???
  8487.     AX = FFEAh
  8488.     BL = ???
  8489. --------T-33FFEB-----------------------------
  8490. INT 33 - Switch-It v3.23 - SET ??? FLAG
  8491.     AX = FFEBh
  8492. --------T-33FFEC-----------------------------
  8493. INT 33 - Switch-It v3.23 - SET ???
  8494.     AX = FFECh
  8495.     BL = ???
  8496. --------T-33FFED-----------------------------
  8497. INT 33 - Switch-It v3.23 - GET ???
  8498.     AX = FFEDh
  8499. Return: AX = ??? (0001h)
  8500.     BX = ???
  8501. Program: Switch-It is a task switcher supporting up to 100 programs
  8502.       simultaneously by Better Software Technology, Inc.
  8503. --------T-33FFEE-----------------------------
  8504. INT 33 - Switch-It v3.23 - GET ???
  8505.     AX = FFEEh
  8506. Return: AX = ???
  8507. --------T-33FFEF-----------------------------
  8508. INT 33 - Switch-It v3.23 - GET ???
  8509.     AX = FFEFh
  8510. Return: BX:AX -> ???
  8511. --------T-33FFF0-----------------------------
  8512. INT 33 - Switch-It v3.23 - SET ???
  8513.     AX = FFF0h
  8514.     BL = ???
  8515. --------T-33FFF1-----------------------------
  8516. INT 33 - Switch-It v3.23 - GET CONFIGURATION FILE
  8517.     AX = FFF1h
  8518. Return: BX:AX -> ASCIZ pathname of configuration file
  8519. Program: Switch-It is a task switcher supporting up to 100 programs
  8520.       simultaneously by Better Software Technology, Inc.
  8521. --------T-33FFF2-----------------------------
  8522. INT 33 - Switch-It v3.23 - SET ??? FLAG
  8523.     AX = FFF2h
  8524. Return: AL = 01h
  8525. --------T-33FFF3-----------------------------
  8526. INT 33 - Switch-It v3.23 - GET ???
  8527.     AX = FFF3h
  8528. Return: AX = ???
  8529. --------T-33FFF4-----------------------------
  8530. INT 33 - Switch-It v3.23 - SET ???
  8531.     AX = FFF4h
  8532.     BX = ???
  8533.     CX = ???
  8534. --------T-33FFF5-----------------------------
  8535. INT 33 - Switch-It v3.23 - GET ???
  8536.     AX = FFF5h
  8537. Return: AX = ???
  8538. --------T-33FFF6-----------------------------
  8539. INT 33 - Switch-It v3.23 - GET ???
  8540.     AX = FFF6h
  8541. Return: AX = ???
  8542. --------T-33FFF7-----------------------------
  8543. INT 33 - Switch-It v3.23 - GET ???
  8544.     AX = FFF7h
  8545.     BX = index of ???
  8546. Return: AX = ???
  8547. --------T-33FFF8-----------------------------
  8548. INT 33 - Switch-It v3.23 - ???
  8549.     AX = FFF8h
  8550.     BX = ???
  8551.     CX = length of program name, including terminating NUL
  8552.     DS:SI -> ASCIZ program pathname
  8553. Return: ???
  8554. Program: Switch-It is a task switcher supporting up to 100 programs
  8555.       simultaneously by Better Software Technology, Inc.
  8556. --------T-33FFF9-----------------------------
  8557. INT 33 - Switch-It v3.23 - NOP
  8558.     AX = FFF9h
  8559. --------T-33FFFA-----------------------------
  8560. INT 33 - Switch-It v3.23 - SET ???
  8561.     AX = FFFAh
  8562.     BX = index of program
  8563. SeeAlso: AX=FFFBh,AX=FFFCh
  8564. --------T-33FFFB-----------------------------
  8565. INT 33 - Switch-It v3.23 - GET ???
  8566.     AX = FFFBh
  8567.     BX = index of program
  8568. Return: AX = ??? (0000h or 0001h)
  8569. SeeAlso: AX=FFFAh,AX=FFFCh
  8570. --------T-33FFFC-----------------------------
  8571. INT 33 - Switch-It v3.23 - CLEAR ???
  8572.     AX = FFFCh
  8573.     BX = index of program
  8574. SeeAlso: AX=FFFAh,AX=FFFCh
  8575. --------T-33FFFD-----------------------------
  8576. INT 33 - Switch-It v3.23 - GET MEMORY ADDRESSES???
  8577.     AX = FFFDh
  8578. Return: AX = first available segment???
  8579.     BX = paragraph of top of conventional memory
  8580.     DX = PSP segment of SI.EXE
  8581. --------T-33FFFE-----------------------------
  8582. INT 33 - Switch-It v3.23 - INSTALLATION CHECK
  8583.     AX = FFFEh
  8584. Return: BX = ???
  8585.     DX = 5349h ("SI")
  8586. --------T-33FFFF-----------------------------
  8587. INT 33 - Switch-It v3.23 - ???
  8588.     AX = FFFFh
  8589.     BX = ???
  8590. Program: Switch-It is a task switcher supporting up to 100 programs
  8591.       simultaneously by Better Software Technology, Inc.
  8592. --------r-34---------------------------------
  8593. INT 34 - FLOATING POINT EMULATION - OPCODE D8h
  8594. Desc:    this interrupt is used to emulate floating-point instructions with
  8595.       an opcode of D8h
  8596. Note:    the floating-point emulators in Borland and Microsoft languages and
  8597.       Lahey FORTRAN use this interrupt
  8598. SeeAlso: INT 35,INT 3E
  8599. --------r-35---------------------------------
  8600. INT 35 - FLOATING POINT EMULATION - OPCODE D9h
  8601. Desc:    this interrupt is used to emulate floating-point instructions with
  8602.       an opcode of D9h
  8603. Note:    the floating-point emulators in Borland and Microsoft languages and
  8604.       Lahey FORTRAN use this interrupt
  8605. SeeAlso: INT 34,INT 36
  8606. --------r-36---------------------------------
  8607. INT 36 - FLOATING POINT EMULATION - OPCODE DAh
  8608. Desc:    this interrupt is used to emulate floating-point instructions with
  8609.       an opcode of DAh
  8610. Note:    the floating-point emulators in Borland and Microsoft languages and
  8611.       Lahey FORTRAN use this interrupt
  8612. SeeAlso: INT 35,INT 37
  8613. --------r-37---------------------------------
  8614. INT 37 - FLOATING POINT EMULATION - OPCODE DBh
  8615. Desc:    this interrupt is used to emulate floating-point instructions with
  8616.       an opcode of DBh
  8617. Note:    the floating-point emulators in Borland and Microsoft languages and
  8618.       Lahey FORTRAN use this interrupt
  8619. SeeAlso: INT 36,INT 38
  8620. --------r-38---------------------------------
  8621. INT 38 - FLOATING POINT EMULATION - OPCODE DCh
  8622. Desc:    this interrupt is used to emulate floating-point instructions with
  8623.       an opcode of DCh
  8624. Note:    the floating-point emulators in Borland and Microsoft languages and
  8625.       Lahey FORTRAN use this interrupt
  8626. SeeAlso: INT 37,INT 39
  8627. --------O-38---------------------------------
  8628. INT 38 - PC-MOS/386 v3.0 - API
  8629. Note:    this API was been moved to INT D4h sometime between versions 3.0 and
  8630.       5.01; v3.0 supported at least functions 02h,04h,0703h,10h,11h, and
  8631.       12h
  8632. SeeAlso: INT D4/AH=02h,INT D4/AH=04h,INT D4/AH=07h,INT D4/AH=10h,INT D4/AH=11h
  8633. --------r-39---------------------------------
  8634. INT 39 - FLOATING POINT EMULATION - OPCODE DDh
  8635. Desc:    this interrupt is used to emulate floating-point instructions with
  8636.       an opcode of DDh
  8637. Note:    the floating-point emulators in Borland and Microsoft languages and
  8638.       Lahey FORTRAN use this interrupt
  8639. SeeAlso: INT 38,INT 3A
  8640. --------r-3A---------------------------------
  8641. INT 3A - FLOATING POINT EMULATION - OPCODE DEh
  8642. Desc:    this interrupt is used to emulate floating-point instructions with
  8643.       an opcode of DEh
  8644. Note:    the floating-point emulators in Borland and Microsoft languages and
  8645.       Lahey FORTRAN use this interrupt
  8646. SeeAlso: INT 39,INT 3B
  8647. --------r-3B---------------------------------
  8648. INT 3B - FLOATING POINT EMULATION - OPCODE DFh
  8649. Desc:    this interrupt is used to emulate floating-point instructions with
  8650.       an opcode of DFh
  8651. Note:    the floating-point emulators in Borland and Microsoft languages and
  8652.       Lahey FORTRAN use this interrupt
  8653. SeeAlso: INT 3A,INT 3C
  8654. --------r-3C---------------------------------
  8655. INT 3C - FLOATING POINT EMULATION - INSTRUCTIONS WITH SEGMENT OVERRIDE
  8656. Notes:    the floating-point emulators in Borland and Microsoft languages and
  8657.       Lahey FORTRAN use this interrupt
  8658.     the generated code is  CD 3C xy mm ....
  8659.       where xy is a modified ESC instruction and mm is the modR/M byte.
  8660.       The xy byte appears to be encoded as
  8661.         s s 0 1 1 x x x      or    s s 0 0 0 x x x
  8662.       where "ss" specifies the segment override:
  8663.         00 -> DS:
  8664.         01 -> SS:
  8665.         10 -> CS:
  8666.         11 -> ES:
  8667. SeeAlso: INT 3B,INT 3D
  8668. --------r-3D---------------------------------
  8669. INT 3D - FLOATING POINT EMULATION - STANDALONE FWAIT
  8670. Notes:    the floating-point emulators in Borland and Microsoft languages and
  8671.       Lahey FORTRAN use this interrupt
  8672.     this vector is modified but not restored by Direct Access v4.0, and
  8673.       may be left dangling by other programs written with the same version
  8674.       of compiled BASIC
  8675. SeeAlso: INT 3C,INT 3E
  8676. --------r-3E---------------------------------
  8677. INT 3E - FLOATING POINT EMULATION - Borland LANGUAGES "SHORTCUT" CALL
  8678. Notes:    the two bytes following the INT 3E instruction are the subcode
  8679.       (see #2384) and a NOP (90h), except for subcodes DCh and DEh, where
  8680.       the second byte is a register count (01h-08h)
  8681.     this vector is modified but not restored by Direct Access v4.0, and
  8682.       may be left dangling by other programs written with the same version
  8683.       of compiled BASIC
  8684. SeeAlso: INT 3D
  8685.  
  8686. (Table 2384)
  8687. Values for Borland floating-point shortcut subcode:
  8688. Subcode        Function
  8689.  DCh    load 8086 stack with 8087 registers; overwrites the 10*N bytes at the
  8690.       top of the stack prior to the INT 3E with the 8087 register contents
  8691.  DEh    load 8087 registers from top of 8086 stack; ST0 is furthest from top
  8692.       of 8086 stack
  8693.  E0h    round TOS and R1 to single precision, compare, pop twice
  8694.       returns AX=8087 status word, FLAGS=8087 condition bits
  8695.  E2h    round TOS and R1 to double precision, compare, pop twice
  8696.       returns AX=8087 status word, FLAGS=8087 condition bits
  8697.     Note: buggy in TPas5.5, because it sets the 8087 precision control
  8698.       field to the undocumented value 01h; this results in actually
  8699.       rounding to single precision
  8700.  E4h    compare TOS/R1 with two POP's
  8701.       returns FLAGS=8087 condition bits
  8702.  E6h    compare TOS/R1 with POP
  8703.       returns FLAGS=8087 condition bits
  8704.  E8h    FTST (check TOS value)
  8705.       returns FLAGS=8087 condition bits
  8706.  EAh    FXAM (check TOS value)
  8707.       returns AX=8087 status word
  8708.  ECh    sine(ST0)
  8709.  EEh    cosine(ST0)
  8710.  F0h    tangent(ST0)
  8711.  F2h    arctangent(ST0)
  8712.  F4h    ST0 = ln(ST0)
  8713.  F6h    ST0 = log2(ST0)
  8714.  F8h    ST0 = log10(ST0)
  8715.  FAh    ST0 = e**ST0
  8716.  FCh    ST0 = 2**ST0
  8717.  FEh    ST0 = 10**ST0
  8718. --------r-3F---------------------------------
  8719. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE, Borland TLINK VROOMM)
  8720. Notes:    INT 3F is the default, and may be overridden while linking
  8721.     this vector is modified but not restored by Direct Access v4.0, and
  8722.       may be left dangling by other programs written with the same version
  8723.       of compiled BASIC
  8724. SeeAlso: INT FE"OVERLAY"
  8725. --------r-3F---------------------------------
  8726. INT 3F - Microsoft Dynamic Link Library manager
  8727. SeeAlso: INT 21/AH=4Bh
  8728. --------B-40---------------------------------
  8729. INT 40 - DISKETTE - ROM BIOS DISKETTE HANDLER RELOCATED BY HARD DISK BIOS
  8730. SeeAlso: INT 13,INT 47"SuperBIOS",INT 63
  8731. --------h-40---------------------------------
  8732. INT 40 - Z100 - Master 8259 - Parity error or S100 error
  8733. SeeAlso: INT 41"Z100",INT FF"Z100"
  8734. --------O-40---------------------------------
  8735. INT 40 - Acorn BBC Master 512 - "OSFIND" - OPEN FILE
  8736.     AL = operation
  8737.         00h close file
  8738.         40h open file for reading
  8739.         80h open file for writing
  8740.         C0h open file for random access
  8741.     DS:BX -> CR-terminated filename
  8742. Return: AL = file handle (00h if file closed or could not be opened)
  8743. Note:    the Acorn BBC Master 512 is an 80186-based add-on board for the
  8744.       6502-based Master 128 which uses the original CPU as an I/O processor
  8745. SeeAlso: INT 41"Acorn",INT 42"Acorn",INT 43"Acorn",INT 44"Acorn",INT 4C"Acorn"
  8746. --------h-40---------------------------------
  8747. INT 40 - TI Professional PC - IRQ0
  8748. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  8749.       that IBM connects to IRQ2
  8750. SeeAlso: INT 0A"IRQ2",INT 41"TI Professional"
  8751. --------B-41---------------------------------
  8752. INT 41 - SYSTEM DATA - HARD DISK 0 PARAMETER TABLE
  8753. Notes:    the default parameter table array is located at F000h:E401h in 100%
  8754.       compatible BIOSes; the pointer may be overridden by the hard disk
  8755.       controller's BIOS to support drive formats unknown to the ROM BIOS
  8756.     not used by some PS/2 models
  8757.     BIOSes which support four hard drives may store the parameter tables
  8758.       for drives 81h-83h immediately following the parameter table pointed
  8759.       at by INT 41, with a separate copy of the drive 81h table for INT 46.
  8760.       The check for such an arrangement is to test whether INT 46 points
  8761.       somewhere other than exactly 16 bytes past INT 41, and the sixteen
  8762.       bytes starting at offset 10h from INT 41 are identical to the sixteen
  8763.       bytes pointed at by INT 46
  8764. SeeAlso: #2385,INT 13/AH=09h,INT 1E,INT 46,INT 60"Adaptec",INT C0"AMI"
  8765.  
  8766. Format of fixed disk parameters:
  8767. Offset    Size    Description    (Table 2385)
  8768.  00h    WORD    number of cylinders
  8769.  02h    BYTE    number of heads
  8770.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  8771.  05h    WORD    starting write precompensation cylinder number
  8772.  07h    BYTE    maximum ECC burst length (XT only)
  8773.  08h    BYTE    control byte (see #2386,#2387)
  8774.  09h    BYTE    standard timeout (XT only, 0 for others)
  8775.  0Ah    BYTE    formatting timeout (XT and WD1002 only, 0 for others)
  8776.  0Bh    BYTE    timeout for checking drive (XT and WD1002 only, 0 for others)
  8777.  0Ch    WORD    cylinder number of landing zone (AT and later only)
  8778.  0Eh    BYTE    number of sectors per track (AT and later only)
  8779.  0Fh    BYTE    reserved
  8780. SeeAlso: #0181,#0183
  8781.  
  8782. Bitfields for XT fixed disk control byte:
  8783. Bit(s)    Description    (Table 2386)
  8784.  2-0    drive step speed
  8785.     000  3ms
  8786.     100  200ms
  8787.     101  70ms (default)
  8788.     110  3ms
  8789.     111  3ms
  8790.  5-3    unused
  8791.  6    disable ECC retries
  8792.  7    disable access retries
  8793.  
  8794. Bitfields for AT fixed disk control byte:
  8795. Bit(s)    Description    (Table 2387)
  8796.  0    unused
  8797.  1    reserved (0)  (disable IRQ)
  8798.  2    reserved (0)  (no reset)
  8799.  3    set if more than 8 heads
  8800.  4    always 0
  8801.  5    set if manufacturer's defect map on max cylinder+1  (AT and later only)
  8802.  6    disable ECC retries
  8803.  7    disable access retries
  8804. --------h-41---------------------------------
  8805. INT 41 - Z100 - Master 8259 - Processor Swap
  8806. SeeAlso: INT 40"Z100",INT 42"Z100"
  8807. --------h-41---------------------------------
  8808. INT 41 - TI Professional PC - IRQ1
  8809. Note:    on the TI Pro, IRQ1 is connected to the same pin on the expansion bus
  8810.       that IBM connects to IRQ3
  8811. SeeAlso: INT 0B"IRQ3",INT 40"TI Professional",INT 42"TI Professional"
  8812. --------O-41---------------------------------
  8813. INT 41 - Acorn BBC Master 512 - "OSGBPB" - MULTI-BYTE GET/PUT
  8814.     AL = function
  8815.         01h put bytes sequentially
  8816.         02h put bytes, ignoring sequential pointer
  8817.         03h get bytes sequentially
  8818.         04h get bytes, ignoring sequential pointer
  8819.         05h get media title and boot option
  8820.         06h get current device and directory
  8821.         07h get current library and device
  8822.         08h search directory
  8823.     DS:BX -> control block (see #2388)
  8824. Return: CF clear if successful
  8825.     CF set on error
  8826.     AL = 00h if operation attempted
  8827.     AL unchanged if unsupported function
  8828. SeeAlso: INT 40"Acorn",INT 42"Acorn",INT 43"Acorn"
  8829.  
  8830. Format of BBC Master control block:
  8831. Offset    Size    Description    (Table 2388)
  8832.  00h    BYTE    file handle
  8833.  01h    DWORD    pointer to data in either I/O processor or Tube processor
  8834.  05h    DWORD    number of bytes to be transferred
  8835.  09h    DWORD    transfer address
  8836. --------G-410000-----------------------------
  8837. INT 41 CPU - MS Windows debugging kernel - OUTPUT CHARACTER FOR USER
  8838.     AX = 0000h
  8839.     DS:DX -> character
  8840. Note:    the kernel calls this function when it wants the user program to
  8841.       output a character
  8842. SeeAlso: AX=0001h
  8843. --------G-410001-----------------------------
  8844. INT 41 CPU - MS Windows debugging kernel - INPUT CHARACTER
  8845.     AX = 0001h
  8846. Return: AL = character
  8847. Note:    the kernel calls this function when it needs to input a character
  8848. SeeAlso: AX=0000h
  8849. --------G-41000D-----------------------------
  8850. INT 41 CPU - MS Windows debugging kernel - TASK GOING OUT
  8851.     AX = 000Dh
  8852. SeeAlso: AX=000Eh
  8853. --------G-41000E-----------------------------
  8854. INT 41 CPU - MS Windows debugging kernel - TASK COMING IN
  8855.     AX = 000Eh
  8856. SeeAlso: AX=000Dh
  8857. --------G-410012-----------------------------
  8858. INT 41 CPU - MS Windows debugging kernel - "OutputDebugString"
  8859.     AX = 0012h
  8860.     DS:SI -> string (Windows 3.0)
  8861.     ES:SI -> string (Windows 3.1)
  8862. Return: nothing???
  8863. Note:    this function is called by the kernel when it wants to output a
  8864.       string through the debugger
  8865. SeeAlso: AX=0050h,INT 68/AH=47h
  8866. --------G-41004F-----------------------------
  8867. INT 41 CPU - MS Windows debugging kernel - DEBUGGER INSTALLATION CHECK
  8868.     AX = 004Fh
  8869. Return: AX = F386h if debugger is present
  8870. SeeAlso: INT 68/AX=4400h
  8871. --------G-410050-----------------------------
  8872. INT 41 P - MS Windows debugging kernel - "DefineDebugSegment"
  8873.     AX = 0050h
  8874.     BX = segment number in executable (0-based)
  8875.     CX = selector
  8876.     DX = instance handle
  8877.     SI = segment flags (0=code, 1=data)
  8878.     ES:DI -> module name of owner
  8879. Return: ???
  8880. SeeAlso: AX=0012h,AX=004Fh
  8881. --------G-410051-----------------------------
  8882. INT 41 CPU - MS Windows debugging kernel - MOVE SEGMENT
  8883.     AX = 0051h
  8884.     ???
  8885. Return: ???
  8886. SeeAlso: AX=0050h,AX=0052h
  8887. --------G-410052-----------------------------
  8888. INT 41 CPU - MS Windows debugging kernel - FREE SEGMENT
  8889.     AX = 0052h
  8890.     BX = freed selector
  8891. SeeAlso: AX=0050h,AX=0051h,AX=005Ch
  8892. --------G-410059-----------------------------
  8893. INT 41 CPU - MS Windows debugging kernel - LOAD TASK
  8894.     AX = 0059h
  8895.     ???:BX = CS:IP of new task's starting point
  8896. --------G-41005C-----------------------------
  8897. INT 41 CPU - MS Windows debugging kernel - FREE INITIAL SEGMENT
  8898.     AX = 005Ch
  8899.     BX = freed selector
  8900. Note:    called only when KERNEL starts, once for CS and once for the DS alias
  8901.       to CS
  8902. SeeAlso: AX=0052h
  8903. --------G-410060-----------------------------
  8904. INT 41 CPU - MS Windows debugging kernel -  END OF SEGMENT LOAD
  8905.     AX = 0060h
  8906.     ???
  8907. Return: ???
  8908. SeeAlso: AX=0061h
  8909. --------G-410061-----------------------------
  8910. INT 41 CPU - MS Windows debugging kernel - END OF SEGMENT DISCARD
  8911.     AX = 0061h
  8912.     ???
  8913. Return: ???
  8914. SeeAlso: AX=0060h
  8915. --------G-410062-----------------------------
  8916. INT 41 CPU - MS Windows debugging kernel - APPLICATION TERMINATING
  8917.     AX = 0062h
  8918. STACK:    BYTE    exit code
  8919. Return: ???
  8920.     STACK unchanged???
  8921. SeeAlso: AX=0064h
  8922. --------G-410063-----------------------------
  8923. INT 41 CPU - MS Windows debugging kernel - ASYNCHRONOUS STOP (Ctrl-Alt-SysReq)
  8924.     AX = 0063h
  8925. --------G-410064-----------------------------
  8926. INT 41 CPU - MS Windows debugging kernel - DLL LOADED
  8927.     AX = 0064h
  8928.     CX:BX = DLL entry point CS:IP
  8929.     SI = module handle
  8930. SeeAlso: AX=0062h,AX=0065h
  8931. --------G-410065-----------------------------
  8932. INT 41 CPU - MS Windows debugging kernel - MODULE REMOVED
  8933.     AX = 0065h
  8934.     ES = module handle
  8935. SeeAlso: AX=0064h
  8936. --------V-42---------------------------------
  8937. INT 42 - VIDEO - RELOCATED DEFAULT INT 10 VIDEO SERVICES (EGA,VGA)
  8938. Desc:    contains the address of the original INT 10 handler which an EGA+
  8939.       video adapter replaces with its own on-board BIOS code
  8940. SeeAlso: INT 10
  8941. Note:    not used by PS/2 built-in VGA or XGA
  8942. --------h-42---------------------------------
  8943. INT 42 - Z100 - Master 8259 - Timer
  8944. SeeAlso: INT 41"Z100",INT 43"Z100"
  8945. --------h-42---------------------------------
  8946. INT 42 - TI Professional PC - IRQ2
  8947. Note:    on the TI Pro, IRQ0 is connected to the same pin on the expansion bus
  8948.       that IBM connects to IRQ4
  8949. SeeAlso: INT 0C"IRQ4",INT 41"TI Professional",INT 43"TI Professional"
  8950. --------b-42---------------------------------
  8951. INT 42 - Western Digital WD1002 SuperBIOS - INT 40 CASCADE
  8952. Note:    if the second WD1002 controller in the system finds INT 40 already in
  8953.       use, it uses this vector to cascade to the first controller's BIOS
  8954. SeeAlso: INT 40"DISKETTE",INT 47"SuperBIOS"
  8955. --------O-42---------------------------------
  8956. INT 42 - Acorn BBC Master 512 - "OSBPUT" - WRITE SINGLE BYTE TO FILE
  8957.     AL = byte to be written
  8958.     BH = file handle
  8959. Return: flags destroyed
  8960. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  8961. --------V-427500-----------------------------
  8962. INT 42 U - Toshiba laptops - ???
  8963.     AX = 7500h
  8964.     BL = ??? (00h or 01h)
  8965. Return: ???
  8966. Note:    used by Toshiba utility VCHAD.EXE
  8967. SeeAlso: AX=7501h,AX=7503h
  8968. --------V-427501-----------------------------
  8969. INT 42 U - Toshiba laptop - GET ??? DATA
  8970.     AX = 7501h
  8971.     DS:DI -> data area to be filled ???
  8972. Return: area filled with data ???
  8973. Note:    used by Toshiba utility VCHAD.EXE
  8974. SeeAlso: AX=7500h,AX=7502h,AX=7503h
  8975. --------V-427502-----------------------------
  8976. INT 42 U - Toshiba laptops - SET ??? DATA
  8977.     AX = 7502h
  8978.     DS:DI -> data area ???
  8979. Return: ???
  8980. Note:    used by Toshiba utility VCHAD.EXE
  8981. SeeAlso: AX=7501h,AX=7503h
  8982. --------V-427503-----------------------------
  8983. INT 42 - Toshiba laptops - GET DISPLAY STATUS
  8984.     AX = 7503h
  8985. Return: AX = 7575h if supported
  8986.     CX = 0001h if supported
  8987.     BH = display type (00h color, 03h monochrome)
  8988.     BL = display state
  8989.         01h internal LCD display is active
  8990.         02h external VGA display is active
  8991.         03h both displays active / DeskStation display mode enabled
  8992.         (not possible on all machines)
  8993. Note:    used by VCHAD.EXE and supported by all Toshiba VGA laptops until about
  8994.       1994 (string "TOSHIBA " at F000:E010h should be checked before call)
  8995.     no longer supported by T21xx series, use INT 10/AX=5F50h instead
  8996.     INT 42 normally points to F000:F065h but may be redirected by QEMM386
  8997. SeeAlso: AX=7500h,AX=7504h,INT 10/AX=5F50h,INT 15/AH=C0h
  8998. --------V-427504-----------------------------
  8999. INT 42 U - Toshiba laptops - ???
  9000.     AX = 7504h
  9001.     BL = ???
  9002. Return: BH = ???
  9003. Note:    used by Toshiba utility VCHAD.EXE
  9004. SeeAlso: AX=7500h,AX=7503h
  9005. --------V-43---------------------------------
  9006. INT 43 - VIDEO DATA - CHARACTER TABLE (EGA,MCGA,VGA)
  9007. Desc:    points at graphics data for characters 00h-7Fh of the current font
  9008.       in 8x8 dot modes, graphics data for all characters in 8x14 and 8x16
  9009.       modes
  9010. Note:    this is not a callable vector!
  9011. SeeAlso: INT 06"no-name",INT 1F,INT 44"VIDEO"
  9012. --------h-43---------------------------------
  9013. INT 43 - Z100 - Master 8259 - Slave 8259 input
  9014. Note:    slave runs in special fully nested mode
  9015. SeeAlso: INT 42"Z100",INT 44"Z100"
  9016. --------h-43---------------------------------
  9017. INT 43 - TI Professional PC - IRQ3 - TIMER1 25ms INTERVAL INTERRUPT
  9018. SeeAlso: INT 0B"IRQ3",INT 42"TI Professional",INT 44"TI Professional"
  9019. SeeAlso: INT 58"TI Professional"
  9020. --------O-43---------------------------------
  9021. INT 43 - Acorn BBC Master 512 - "OSBGET" - READ SINGLE BYTE FROM FILE
  9022.     BH = file handle
  9023. Return: CF clear if successful
  9024.         AL = byte read from file
  9025.     CF set on error
  9026. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 42"Acorn",INT 46"Acorn"
  9027. --------V-44---------------------------------
  9028. INT 44 - VIDEO DATA - ROM BIOS CHARACTER FONT, CHARACTERS 00h-7Fh (PCjr)
  9029. Desc:    this vector points at graphics data for current character font
  9030. SeeAlso: INT 1F,INT 43"VIDEO"
  9031. --------N-44---------------------------------
  9032. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  9033. --------I-44---------------------------------
  9034. INT 44 - IBM 3270-PC High Level Language API
  9035.     DS:SI -> parameter control block
  9036. --------h-44---------------------------------
  9037. INT 44 - Z100 - Master 8259 - Serial A
  9038. SeeAlso: INT 43"Z100",INT 45"Z100"
  9039. --------h-44---------------------------------
  9040. INT 44 - TI Professional PC - IRQ4
  9041. Note:    on the TI Pro, IRQ4 is connected to the same pin on the expansion bus
  9042.       that IBM connects to IRQ5
  9043. SeeAlso: INT 0D"IRQ5",INT 43"TI Professional",INT 45"TI Professional"
  9044. --------v-44---------------------------------
  9045. INT 44 - VIRUS - "Lehigh" - ORIGINAL INT 21h VECTOR
  9046. SeeAlso: INT 32"VIRUS",INT 60"VIRUS",INT 70"VIRUS",INT 9E"VIRUS"
  9047. --------O-4400-------------------------------
  9048. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  9049.     AH = 00h
  9050.     AL = function
  9051.         00h get current filing system
  9052.         Return: AL = filing system (see #2389)
  9053.         01h get address of commandline tail
  9054.         Return: BX buffer filled with address of command tail in I/O
  9055.                   processor address space (use INT 4A/AL=05h to
  9056.                   retrieve)
  9057.         FFh flush all files onto secondary storage
  9058.     BX -> 4-byte data buffer
  9059. Note:    the commandline tail is terminated with a carriage return (0Dh)
  9060. SeeAlso: INT 40"Acorn",INT 45"Acorn"
  9061.  
  9062. (Table 2389)
  9063. Values for BBC Master filing system:
  9064.  00h    none
  9065.  01h    1200 bps cassette
  9066.  02h    300 bps cassette
  9067.  03h    ROM FS
  9068.  04h    DFS
  9069.  05h    ANFS/NFS
  9070.  06h    TFS
  9071.  08h    ADFS
  9072. --------O-44---------------------------------
  9073. INT 44 - Acorn BBC Master 512 - "OSARGS" - GET/SET FILE PARAMS FOR OPEN FILE
  9074.     AH = nonzero file handle
  9075.     AL = function
  9076.         00h get sequential pointer for file
  9077.         01h set sequential pointer for file
  9078.         02h get length of file
  9079.     BX -> 4-byte data buffer
  9080. Return: BX buffer updated if appropriate
  9081. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44/AH=00h,INT 45"Acorn",INT 4A"Acorn"
  9082. --------h-45---------------------------------
  9083. INT 45 - Z100 - Master 8259 - Serial B
  9084. SeeAlso: INT 44"Z100",INT 46"Z100"
  9085. --------h-45---------------------------------
  9086. INT 45 - TI Professional PC - IRQ5
  9087. Note:    on the TI Pro, IRQ5 is connected to the same pin on the expansion bus
  9088.       that IBM connects to IRQ6
  9089. SeeAlso: INT 0E"IRQ6",INT 44"TI Professional",INT 46"TI Professional"
  9090. --------O-45---------------------------------
  9091. INT 45 - Acorn BBC Master 512 - "OSFILE" - READ/WRITE FILE OR DIRECTORY INFO
  9092.     AL = function
  9093.         00h save block of memory as file
  9094.         01h update directory entry for existing file
  9095.         02h set load address for existing file
  9096.         03h set execution address for existing file
  9097.         04h set attributes for existing file
  9098.         05h read directory
  9099.         06h delete file
  9100.         FFh load file
  9101.     DS:BX -> control block (see #2390)
  9102. Return: FLAGS destroyed
  9103.     AL = file type
  9104.         00h not found
  9105.         01h file found
  9106.         02h directory found
  9107.         FFh protected file
  9108. SeeAlso: INT 40"Acorn",INT 41"Acorn",INT 44"Acorn",INT 46"Acorn"
  9109.  
  9110. Format of BBC Master control block:
  9111. Offset    Size    Description    (Table 2390)
  9112.  00h    WORD    address of CR-terminated filename
  9113.  02h    DWORD    load address of file
  9114.  06h    DWORD    execution address of file
  9115.  0Ah    DWORD    start address of data to save
  9116.  0Eh    DWORD    end address of data to save, or file attributes
  9117.         file attributes in low byte (see #2391)
  9118.         other three bytes are filing-system specific file attributes
  9119.  
  9120. Bitfields for BBC Master file attributes:
  9121. Bit(s)    Description    (Table 2391)
  9122.  0    no owner read access
  9123.  1    no owner write access
  9124.  2    not executable by owner
  9125.  3    not deletable by owner
  9126.  4    no public read access
  9127.  5    no public write access
  9128.  6    not executable with public access
  9129.  7    not deletable with public access
  9130. --------B-46---------------------------------
  9131. INT 46 - SYSTEM DATA - HARD DISK 1 DRIVE PARAMETER TABLE
  9132. Note:    not used by some PS/2 models
  9133. SeeAlso: INT 13/AH=09h,INT 41,INT 60"Adaptec",INT C0"AMI"
  9134. --------h-46---------------------------------
  9135. INT 46 - Z100 - Master 8259 - Keyboard, Retrace, and Light Pen
  9136. SeeAlso: INT 45"Z100",INT 47"Z100"
  9137. --------h-46---------------------------------
  9138. INT 46 - TI Professional PC - IRQ6
  9139. Note:    on the TI Pro, IRQ6 is connected to the same pin on the expansion bus
  9140.       that IBM connects to IRQ7
  9141. SeeAlso: INT 0F"IRQ7",INT 45"TI Professional",INT 47"TI Professional"
  9142. --------O-46---------------------------------
  9143. INT 46 - Acorn BBC Master 512 - "OSRDCH" - GET CHARACTER FROM CUR INPUT STREAM
  9144. Return: CF clear if successful
  9145.         AL = character read
  9146.     CF set on error
  9147.         AL = error code
  9148. SeeAlso: INT 40"Acorn",INT 43"Acorn",INT 47"Acorn",INT 49"Acorn"
  9149. --------h-47---------------------------------
  9150. INT 47 - Z100 - Master 8259 - Printer
  9151. SeeAlso: INT 46"Z100",INT 48"Z100"
  9152. --------h-47---------------------------------
  9153. INT 47 - TI Professional PC - IRQ7 - KEYBOARD USART
  9154. SeeAlso: INT 09"IRQ1",INT 46"TI Professional"
  9155. --------O-47---------------------------------
  9156. INT 47 - Acorn BBC Master 512 - "OSWRCH" - WRITE CHARACTER TO CUR OUTPUT STREAM
  9157.     AL = character to be written
  9158. Return: FLAGS destroyed
  9159. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 49"Acorn"
  9160. --------b-47---------------------------------
  9161. INT 47 - Western Digital WD1002-27X SuperBIOS - INT 40 CASCADE
  9162. Desc:    used by the second WD1002-27X controller to cascade to the first
  9163.       controller's INT 40
  9164. SeeAlso: INT 40"DISKETTE",INT 42"SuperBIOS",INT 48"SuperBIOS"
  9165. ----------478000-----------------------------
  9166. INT 47 - SQL Base - DATABASE ENGINE API
  9167.     AX = 8000h
  9168.     DS:BX -> parameter block, first word is function number (see #2392)
  9169. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  9170. SeeAlso: AX=8001h
  9171.  
  9172. (Table 2392)
  9173. Values for SQL Base function number:
  9174.  01h    "SQLFINI" initalialize application's use of the database
  9175.  02h    "SQLFDON" application is done using the database
  9176.  03h    "SQLFCON" connect to a cursor/database
  9177.  04h    "SQLFDIS" disconnect from a cursor/database
  9178.  05h    "SQLFCOM" compile a SQL command
  9179.  06h    "SQLFEXE" execute a SQL command
  9180.  07h    "SQLFCEX" compile and execute a SQL command
  9181.  08h    "SQLFCMT" commit a transaction to the database
  9182.  09h    "SQLFDES" describe the items of a SELECT statement
  9183.  0Ah    "SQLFGFI" get fetch information
  9184.  0Bh    "SQLFFBK" fetch previous result row from SELECT statement
  9185.  0Ch    "SQLFFET" fetch next result row from SELECT statement
  9186.  0Dh    "SQLFEFB" enable fetch backwards
  9187.  0Eh    "SQLFPRS" position in result set
  9188.  0Fh    "SQLFURS" undo result set
  9189.  10h    "SQLFNBV" get number of bind variables
  9190.  11h    "SQLFBND" bind data variables
  9191.  12h    "SQLFBNN" bind numerics
  9192.  13h    "SQLFBLN" bind long number
  9193.  14h    "SQLFBLD" bind long data variables
  9194.  15h    "SQLFSRS" start restriction set processing
  9195.  16h    "SQLFRRS" restart restriction set processing
  9196.  17h    "SQLFCRS" close restriction set
  9197.  18h    "SQLFDRS" drop restriction set
  9198.  19h    "SQLFARF" apply Roll Forward journal
  9199.  1Ah    "SQLFERF" end Roll Forward journal
  9200.  1Bh    "SQLFSRF" start Roll Forward journal
  9201.  1Ch    "SQLFSTO" store a compiled SQL command
  9202.  1Dh    "SQLFRET" retrieve a compiled SQL command
  9203.  1Eh    "SQLFDST" drop a stored command
  9204.  1Fh    "SQLFCTY" get command type
  9205.  20h    "SQLFEPO" get error position
  9206.  21h    "SQLFGNR" get number of rows
  9207.  22h    "SQLFNSI" get number of select items
  9208.  23h    "SQLFRBF" get Roll Back flag
  9209.  24h    "SQLFRCD" get return code
  9210.  25h    "SQLFROW" get number of ROWs
  9211.  26h    "SQLFSCN" set cursor name
  9212.  27h    "SQLFSIL" set isolation level
  9213.  28h    "SQLFSLP" set log parameters
  9214.  29h    "SQLFSSB" set select buffer
  9215.  2Ah    "SQLFSSS" set sort space
  9216.  2Bh    "SQLFRLO" read long
  9217.  2Ch    "SQLFWLO" write long
  9218.  2Dh    "SQLFLSK" long seek
  9219.  2Eh    "SQLFGLS" get long size
  9220.  2Fh    "SQLFELO" end long operation
  9221.  30h    "SQLFRBK" roll back a transaction from the database
  9222.  31h    "SQLFERR" error message
  9223.  32h    "SQLFCPY" copy
  9224.  33h    "SQLFR01" reserved
  9225.  34h    "SQLFSYS" system
  9226.  35h    "SQLFSTA" statistics
  9227.  36h    "SQLFR02" reserved
  9228.  37h    "SQLFXAD" extra add
  9229.  38h    "SQLFXCN" extra character to number
  9230.  39h    "SQLFXDA" extra date add
  9231.  3Ah    "SQLFXDP" extra date picture
  9232.  3Bh    "SQLFXDV" extra divide
  9233.  3Ch    "SQLFXML" extra multiply
  9234.  3Dh    "SQLFXNP" extra number picture
  9235.  3Eh    "SQLFXPD" extra picture date
  9236.  3Fh    "SQLFXSB" extra subtract
  9237.  40h    "SQLFINS" install database
  9238.  41h    "SQLFDIN" deinstall database
  9239.  42h    "SQLFDIR" directory of databases
  9240.  43h    "SQLFTIO" timeout
  9241.  44h    "SQLFFQN" get fully qualified column name
  9242.  45h    "SQLFEXP" explain execution plan
  9243.  46h    "SQLFFER" get full error
  9244.  47h    "SQLFBKP" begin online backup
  9245.  48h    "SQLFRDC" read backup data chunk
  9246.  49h    "SQLFEBK" end backup
  9247.  4Ah    "SQLFRES" begin restore from backup
  9248.  4Bh    "SQLFWDC" write backup data chunk for restore
  9249.  4Ch    "SQLFRRD" recover restored database to consistent state
  9250.  4Dh    "SQLFERS" end restore
  9251.  4Eh    "SQLFNRR" return number of result set rows
  9252.  4Fh    "SQLFSTR" start restriction mode
  9253.  50h    "SQLFSPR" stop restriction mode
  9254.  51h    "SQLFCNC" connect 2
  9255.  52h    "SQLFCNR" connect with no recovery
  9256.  53h    "SQLFOMS" set output message size
  9257.  54h    "SQLFIMS" set input message size
  9258.  55h    "SQLFSCP" set cache pages
  9259.  56h    "SQLFDSC" describe items of a SELECT statement (external)
  9260.  57h    "SQLFLAB" get label info for items in SELECT statement
  9261.  58h    "SQLFCBV" clear bind variables
  9262.  59h    "SQLFGET" get database information
  9263.  5Ah    "SQLFSET" set database information
  9264.  5Bh    "SQLFTEC" translate error code
  9265. ----------478001-----------------------------
  9266. INT 47 - SQL Base - GET VERSION NUMBER
  9267.     AX = 8001h
  9268. Return: ???
  9269. Program: SQL Base is a network-oriented database engine by Gupta Technologies
  9270. SeeAlso: AX=8000h
  9271. --------B-48---------------------------------
  9272. INT 48 - KEYBOARD - CORDLESS KEYBOARD TRANSLATION (PCjr)
  9273. SeeAlso: INT 49"PCjr"
  9274. --------h-48---------------------------------
  9275. INT 48 - Z100 - Slave 8259 - S100 vectored line 0
  9276. SeeAlso: INT 47"Z100",INT 49"Z100"
  9277. --------N-48---------------------------------
  9278. INT 48 - Watstar PC Network data pointer 1
  9279. SeeAlso: INT 49"Watstar"
  9280. --------b-48---------------------------------
  9281. INT 48 - TI Professional PC - SPEAKER DEVICE SERVICE ROUTINE
  9282.     no details available
  9283. SeeAlso: INT 40"TI Professional",INT 49"TI Professional"
  9284. SeeAlso: INT 4A"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  9285. --------O-48---------------------------------
  9286. INT 48 - Acorn BBC Master 512 - "OSNEWL" - SEND NEWLINE TO OUTPUT STREAM
  9287. Return: FLAGS destroyed
  9288. Note:    writes a carriage return (0Dh) followed by a linefeed (0Ah)
  9289. SeeAlso: INT 40"Acorn",INT 47"Acorn",INT 49"Acorn"
  9290. --------b-48---------------------------------
  9291. INT 48 - Western Digital WD1002-27X SuperBIOS - DRIVE DATA (NOT A VECTOR!)
  9292. Note:    the second WD1002-27X controller in a system uses the low byte to
  9293.       store the number of drives controlled by the second controller,
  9294.       and the high word for temporary storage during track recalculation;
  9295.       the first controller uses offsets 74h-77h in the BIOS data area
  9296.       (see MEMORY.LST) to store data
  9297. SeeAlso: INT 47"SuperBIOS"
  9298. --------V-48---------------------------------
  9299. INT 48 U - Compaq UILIB.EXE - API
  9300.     AX = function (see #2393)
  9301.     BX = call type (0002h) (see #2394)
  9302.     ???
  9303. Return: ???
  9304. Note:    returns AX=FFFFh if 1000h<=AX<=2000h and AX is not one of the functions
  9305.       listed below
  9306. SeeAlso: AX=1A70h
  9307.  
  9308. (Table 2393)
  9309. Values for valid UILIB function number:
  9310.  1000h    1160h    12D0h    1430h    1570h    1680h    17F0h    1920h    1A90h
  9311.  1010h    1170h    12E0h    1440h    1578h    1690h    1800h    1930h    1AA0h
  9312.  1020h    1180h    12F0h    1450h    1580h    16A0h    1810h    1940h
  9313.  1030h    1190h    1300h    1460h    1590h    16B0h    1820h    1950h
  9314.  1040h    11A0h    1310h    1470h    1594h    16C0h    1830h    1960h
  9315.  1050h    11B0h    1320h    1480h    1598h    16D0h    1840h    1970h
  9316.  1060h    11C0h    1330h    1490h    15A0h    16E0h    1848h    1980h
  9317.  1070h    11D0h    1340h    14A0h    15B0h    16F0h    1850h    1990h
  9318.  1080h    11E0h    1350h    14B0h    15C0h    1700h    1860h    19A0h
  9319.  1090h    11F0h    1360h    14B8h    15D0h    1710h    1870h    19B0h
  9320.  1095h    1200h    1370h    14BBh    15D4h    1720h    1878h    19C0h
  9321.  1098h    1210h    1380h    14C0h    15D8h    1730h    1880h    19D0h
  9322.  10A0h    1220h    1390h    14D0h    15E0h    1735h    1890h    19E0h
  9323.  10C0h    1230h    13A0h    14E0h    15F0h    1740h    1898h    19F0h
  9324.  10D0h    1240h    13B0h    14F0h    1600h    1750h    18A0h    1A00h
  9325.  10E0h    1250h    13B8h    1500h    1610h    1770h    18B0h    1A10h
  9326.  10F0h    1260h    13C0h    1508h    1620h    1780h    18C0h    1A20h
  9327.  1100h    1270h    13D0h    1510h    1630h    1790h    18D0h    1A30h
  9328.  1110h    1280h    13E0h    1520h    1640h    17A0h    18E0h    1A40h
  9329.  1120h    1290h    13F0h    1530h    1650h    17B0h    18F0h    1A50h
  9330.  1130h    12A0h    1400h    1540h    1660h    17C0h    1900h    1A60h
  9331.  1140h    12B0h    1410h    1550h    1664h    17D0h    1909h    1A70h
  9332.  1150h    12C0h    1420h    1560h    1670h    17E0h    1910h    1A80h
  9333. --------V-481A70-----------------------------
  9334. INT 48 U - Compaq UILIB.EXE - INSTALLATION CHECK
  9335.     AX = 1A70h
  9336.     BX = call type (see #2394)
  9337. Return: CX = 5649h ('VI') if installed
  9338.     DX = 4557h ('EW') if installed
  9339.         AX = version??? (0106h)
  9340.  
  9341. (Table 2394)
  9342. Values for UILIB call type:
  9343.  0000h    near
  9344.  0001h    far
  9345.  0002h    INT (only valid call type when using INT 48)
  9346.  0003h    near
  9347. --------B-49---------------------------------
  9348. INT 49 - SYSTEM DATA - NON-KEYBOARD SCAN-CODE TRANSLATION TABLE (PCjr)
  9349. SeeAlso: #2395,INT 48"PCjr"
  9350.  
  9351. Format of PCjr scan-code translation table:
  9352. Offset    Size    Description    (Table 2395)
  9353.  00h    BYTE    number of non-keyboard scancodes in the table
  9354.  01h  N WORDs    high byte 00h (NUL) byte scancode with low order byte
  9355.           representing the scancode mapped values relative to their
  9356.           input values within the range of 56h through 7Eh
  9357. --------h-49---------------------------------
  9358. INT 49 - Z100 - Slave 8259 - S100 vectored line 1
  9359. SeeAlso: INT 48"Z100",INT 4A"Z100"
  9360. --------V-49---------------------------------
  9361. INT 49 - TI Professional PC - CRT DEVICE SERVICE ROUTINE
  9362.     apparently provides direct video display on the TI Professional PC
  9363. SeeAlso: INT 40"TI Professional",INT 48"TI Professional"
  9364. SeeAlso: INT 4A"TI Professional",INT 4B"TI Professional",INT 4D/AH=00h
  9365. SeeAlso: INT 57"TI Professional"
  9366. --------N-49---------------------------------
  9367. INT 49 - Watstar PC Network data pointer 2
  9368. SeeAlso: INT 48"Watstar"
  9369. --------O-49---------------------------------
  9370. INT 49 - Acorn BBC Master 512 - "OSASCI" - WRITE CHARACTER TO CUR OUTPUT STREAM
  9371.     AL = character to be written
  9372. Return: FLAGS destroyed
  9373. Note:    converts carriage return (0Dh) into CRLF sequence (0Dh 0Ah)
  9374. SeeAlso: INT 40"Acorn",INT 46"Acorn",INT 47"Acorn",INT 48"Acorn"
  9375. --------b-49---------------------------------
  9376. INT 49 - Tandy 2000 - BOOTSTRAP LOADER
  9377. Note:    this interrupt is identical to INT 19
  9378. SeeAlso: INT 19,INT 4A"Tandy 2000",INT 4C"Tandy 2000",INT 51"Tandy 2000"
  9379. --------a-490001-----------------------------
  9380. INT 49 - MAGic v1.16+ - TURN ON MAGNIFICATION
  9381.     AX = 0001h
  9382. Return: AX = status (see #2396)
  9383.     BX,CX,DX destroyed
  9384. Program: MAGic (MAGnification In Color) is a TSR by Microsystems Software, Inc.
  9385.       providing 2x2 text and graphics magnification on VGA, XGA, and SVGA
  9386. Note:    INT 49 is the default, but may be overridden on the commandline.  The
  9387.       actual interrupt in use may be found by searching for the signature
  9388.       "MAGic" or "xMAGic" (for the deluxe version) immediately preceding
  9389.       the interrupt handler (this is also the installation check).    MAGic
  9390.       uses CodeRunneR, which places the signature "RT" at offset 0000h in
  9391.       the interrupt handler's segment, followed by MAGic's TSR ID of
  9392.       "VMAG".
  9393. SeeAlso: AX=0002h,AX=0003h,AX=0004h,AX=0008h
  9394. Index:    installation check;MAGic
  9395.  
  9396. (Table 2396)
  9397. Values for MAGic status:
  9398.  0000h    cannot magnify current video mode
  9399.  0002h    magnified (text mode)
  9400.  0003h    magnified (graphics mode)
  9401.  FFFDh    function works only in magnified mode
  9402.  FFFFh    MAGic busy, retry later
  9403. --------a-490002-----------------------------
  9404. INT 49 - MAGic v1.16+ - TURN OFF MAGNIFICATION
  9405.     AX = 0002h
  9406. Return: AX = status (see #2396)
  9407.     BX,CX,DX destroyed
  9408. SeeAlso: AX=0001h
  9409. --------a-490003-----------------------------
  9410. INT 49 - MAGic v1.16+ - SHIFT MAGNIFIED WINDOW TO INCLUDE SPECIFIED LOCATION
  9411.     AX = 0003h
  9412.     BX = vertical position (character row [text] or pixel row [graphics])
  9413.     DX = horizontal position (char column [text] or 8-pixel units [gr])
  9414. Return: AX = status
  9415.         0000h successful
  9416.         FFFFh MAGic busy, retry later
  9417.     BX,CX,DX destroyed
  9418. Note:    window is not moved if the position is inside the current window
  9419. SeeAlso: AX=0001h,AX=0004h,AX=0005h
  9420. --------a-490004-----------------------------
  9421. INT 49 - MAGic v1.16+ - REPOSITION MAGNIFIED WINDOW
  9422.     AX = 0004h
  9423.     BX = vertical position of upper left corner
  9424.     DX = horizontal position
  9425. Return: AX = status (see AX=0003h)
  9426.     BX,CX,DX destroyed
  9427. SeeAlso: AX=0001h,AX=0003h,AX=0005h
  9428. --------a-490005-----------------------------
  9429. INT 49 - MAGic v1.16+ - GET POSITION OF MAGNIFIED WINDOW
  9430.     AX = 0005h
  9431. Return: AX = status
  9432.         0000h successful
  9433.         BX = vertical position (char row or pixel row)
  9434.         DX = horizontal position (char column or 8-pixel units)
  9435.         FFFFh MAGic busy, retry later
  9436.         BX,DX destroyed
  9437.     CX destroyed
  9438. SeeAlso: AX=0001h,AX=0003h,AX=0004h,AX=0006h,AX=0007h
  9439. --------a-490006-----------------------------
  9440. INT 49 - MAGic v1.16+ - GET SIZE OF FULL SCREEN
  9441.     AX = 0006h
  9442. Return: AX = status
  9443.         0000h successful
  9444.         BX = vertical size (char rows or pixel rows)
  9445.         DX = horizontal size (char cols or 8-pixel units)
  9446.         FFFFh MAGic busy, retry later
  9447.         BX,DX destroyed
  9448.     CX destroyed
  9449. SeeAlso: AX=0001h,AX=0005h,AX=0007h
  9450. --------a-490007-----------------------------
  9451. INT 49 - MAGic v1.16+ - GET SIZE OF MAGNIFICATION WINDOW
  9452.     AX = 0007h
  9453. Return: AX = status
  9454.         0000h successful
  9455.         BX = vertical size (char rows or pixel rows)
  9456.         DX = horizontal size (char cols or 8-pixel units)
  9457.         FFFEh invalid function
  9458.         FFFFh MAGic busy, retry later
  9459.         BX,DX destroyed
  9460.     CX destroyed
  9461. BUG:    in v1.16 and v1.17, this function is not recognized as valid, but
  9462.       AX=0000h is accepted and will branch into hyperspace
  9463. SeeAlso: AX=0001h,AX=0006h
  9464. --------a-490008-----------------------------
  9465. INT 49 - MAGic v1.23+ - SET TEXT MODE MAGNIFICATION SIZE
  9466.     AX = 0008h
  9467.     BX = scaling factor (01h=1.4 times, 02h, 04h, 06h, 08h, 09h=12 times)
  9468. Return: AX = status
  9469.         0000h successful
  9470.         FFFBh scaling factor only available in MAGic Deluxe
  9471.         FFFCh already in magnified state, can't set size
  9472. Notes:    this call specifies the amount a subsequent call to AX=0001h should
  9473.       magnify the display
  9474.     scaling factors greater than 2 are only available in MAGic Deluxe
  9475. SeeAlso: AX=0001h
  9476. --------B-4A---------------------------------
  9477. INT 4A C - SYSTEM - USER ALARM HANDLER
  9478. Desc:    This interrupt is invoked by the BIOS when a real-time clock alarm
  9479.       occurs; an application may use it to perform an action at a
  9480.       predetermined time.
  9481. Note:    this interrupt is called from within a hardware interrupt handler,
  9482.       so all usual precautions against reentering DOS must be taken
  9483. SeeAlso: INT 1A/AH=06h
  9484. --------h-4A---------------------------------
  9485. INT 4A - Z100 - Slave 8259 - S100 vectored line 2
  9486. SeeAlso: INT 49"Z100",INT 4B"Z100"
  9487. --------b-4A---------------------------------
  9488. INT 4A - TI Professional PC - KEYBOARD DEVICE SERVICE ROUTINE
  9489.     no details available
  9490. SeeAlso: INT 47"TI Professional",INT 48"TI Professional"
  9491. SeeAlso: INT 49"TI Professional",INT 4C"TI Professional",INT 4D/AH=00h
  9492. SeeAlso: INT 5B"TI Professional"
  9493. --------b-4A---------------------------------
  9494. INT 4A - Tandy 2000 - PRINT SCREEN
  9495. Note:    this interrupt is identical to INT 05
  9496. SeeAlso: INT 05"PRINT SCREEN"
  9497. --------O-4A---------------------------------
  9498. INT 4A - Acorn BBC Master 512 - "OSWORD" - MISC FUNCTIONS USING CONTROL BLOCK
  9499.     AL = function code
  9500.         FAh transfer data between 80186 and 65C12 I/O processor
  9501.     DS:BX -> control block (see #2397)
  9502. Return: FLAGS destroyed
  9503.     control block updated
  9504. Note:    there are more functions than are listed here, but details are not
  9505.       available
  9506. SeeAlso: INT 40"Acorn",INT 4B"Acorn",INT 4C"Acorn"
  9507.  
  9508. Format of BBC Master control block for function FAh:
  9509. Offset    Size    Description    (Table 2397)
  9510.  00h    BYTE    number of parameters sent to I/O processor (0Dh,0Eh)
  9511.  01h    BYTE    number of parameters read from I/O processor (01h)
  9512.  02h    DWORD    I/O processor address
  9513.  06h    DWORD    80186 segment:offset address
  9514.  0Ah    WORD    number of bytes to transfer
  9515.  0Ch    BYTE    operation type
  9516.         00h write to 65C12 at 24 us/byte
  9517.         01h read from 65C12 at 24 us/byte
  9518.         02h write to 65C12 at 26 us/word
  9519.         03h read from 65C12 at 26 us/word
  9520.         04h write to 65C12 at 10 us/byte using 256-byte blocks
  9521.         05h read from 65C12 at 10 us/byte using 256-byte blocks
  9522.  0Dh    BYTE    65C12 memory access control (only used if offset 00h = 0Eh)
  9523.         (see #2398)
  9524.  
  9525. Bitfields for 65C12 memory access control:
  9526. Bit(s)    Description    (Table 2398)
  9527.  7    unused
  9528.  6    always use main screen memory if I/O addr 3000h-7FFFh (overrides bit 5)
  9529.  5    use shadow screen memory if screen address specified
  9530.  4    use current ROM rather than ROM selected by bits 3-0 (only if I/O
  9531.       address between 8000h and BFFFh)
  9532.  3-0    paged ROM number
  9533. --------!---Section--------------------------
  9534.